-
개인 공부 후 정리 목적인 글입니다.
실세계 객체의 특징 : 객체마다 고유한 특성(state)과 행동(behavior)를 가진다.
다른 객체들과 정보를 주고 받는 등의 상호작용을 하면서 존재한다.
객체
- 클래스의 모양대로 생성된 실체로 객체 내 데이터에 대한 보호, 외부의 접근을 제한
캡슐화
- 객체를 캡슐로 싸서 내부를 볼 수 없게 하는 것
- 외부의 접근으로부터 객체를 보호
클래스
- 객체 모양을 선언한 틀(캡슐화)
- 메소드(멤버 함수)와 필드(멤버 변수)는 모두 클래스 내에서 구현한다.
객체 지향의 특성
상속
- 상위 객체의 속성이 하위 객체에 물려지는 것으로 하위 객체가 상위 객체의 속성을 모두 가지는 관계
- 자식 클래스가 부모 클래스의 속성을 물려받고, 기능을 확장한다.
부모 클래스 : 수퍼 클래스
하위(자식) 클래스 : 서브 클래스, 수퍼 클래스를 재사용하고 새로운 특성을 추가
다형성
- 같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현
메소드 오버로딩 : 같은 이름이지만 다르게 작동하는 여러 메소드
메소드 오버라이딩 : 슈퍼 클래스의 메소드를 서브 클래스마다 다르게 구현
객체 지향 언어의 목적
소프트웨어의 생산성 향상
- 컴퓨터 산업 발전에 따라 소프트웨어의 생명 주기(life cycle) 단축
- 객체 지향 언어 -> 소프트웨어의 재사용, 빠른 수정, 다시 만드는 부담 줄임, 생산성 향상
절차 지향 프로그래밍과 객체 지향 프로그래밍
절차 지향 프로그래밍
- 작업 순서 표현
- 작업을 함수로 작성한, 함수들의 집합
객체 지향 프로그래밍
- 객체들 간의 상호작용으로 표현
- 클래스 혹은 객체들의 집합으로 프로그램 작성
클래스와 객체
클래스
- 객체를 만들어내기 위한 설계도 혹은 틀
- 객체의 속성과 행동을 포함
클래스 선언, class Circle
- class 키워드로 선언, 클래스는 { 로 시작하여 } 로 닫으며 이곳에 모든 필드와 메소드를 구현한다.
- class Circle은 Circle 이름의 클래스를 선언하고 클래스의 접근 권한은 public(다른 클래스에서 Circle 클래스를 사용하거나 접근할 수 있음을 선언한다)
필드와 메소드
- 필드(field) : 객체 내에 값을 저장하는 멤버 변수
- 메소드(method) : 함수이며 객체의 행동(행위)를 구현한다.
필드의 접근 지정자, public
- 필드나 메소드 앞에 붙어 다른 클래스의 접근 허용을 표시
- public 접근 지정자 : 다른 모든 클래스의 접근을 허용한다.
생성자
- 클래스의 이름과 동일한 특별한 메소드로 객체가 생성될 때 자동으로 한 번 호출되는 메소드
- 개발자는 객체를 초기화하는데 필요한 코드를 작성한다.
객체
- 클래스의 모양 그대로 찍어낸 실체 (프로그램 실행 중에 생성되는 실체,
메모리 공간을 갖는 구체적인 실체, 인스턴스(instance)라고도 부름)
* 객체들은 클래스에 선언된 동일한 속성을 가지지만, 객체마다 서로 다른 고유한 값으로 구분된다. *
객체 생성
- 반드시 new 키워드를 이용하여 생성(new는 객체의 생성자 호출)
객체 생성 과정
- 객체에 대한 레퍼런스 변수 선언
- 객체 생성(클래스 타입 크기의 메모리 할당, 객체 내 생성자 코드 실행)
객체의 멤버 접근
- 객체 레퍼런스.멤버
생성자 / 생성자의 특징
생성자
- 객체가 생성될 때 초기화를 위해 실행되는 메소드
생성자의 특징
- 생성자는 메소드로 생성자 이름은 클래스 이름과 반드시 동일해야 된다.
- 생성자는 여러 개 작성이 가능하며(오버로딩) new를 통해 객체를 생성할 때, 객체당 한 번 호출 가능하다.
- 생성자는 리턴 타입을 지정할 수 없으며 객체를 초기화하는 목적
- 생성자는 객체가 생성될 때 반드시 호출됨으로 하나 이상 선언되어야 한다.
기본 생성자
- 매개 변수가 없고 아무 작업 없이 단순 리턴하는 생성자로 디폴트 생성자라고도 부른다.
- 클래스에 생성자가 하나도 선언되지 않은 경우, 컴파일러에 의해 자동으로 삽입
this 레퍼런스
this
- 객체 자신에 대한 레퍼런스(컴파일러에 의해 자동 관리, 개발자는 사용만 하면 됨)
this가 필요한 경우
- 객체의 멤버 변수와 메소드 변수의 이름이 같은 경우
- 다른 메소드 호출 시 객체 자신의 레퍼런스를 전달할 때
- 메소드가 객체 자신의 레퍼런스를 반환할 때
this()로 다른 생성자 호출
- 클래스 내의 다른 생성자 호출
- 생성자 내에서만 사용 가능
- 반드시 생성자 코드의 제일 처음에 수행
객체 치환 : 레퍼런스가 복사된다.
메소드 형식
메소드
- 클래스의 멤버 함수로 자바의 모든 메소드는 반드시 클래스 안에 있어야 한다.(캡슐화 원칙)
메소드 구성 형식
- 접근 지정자 : public, private, protected, 디폴트(접근 지정자가 생략된 경우)
- 리턴 타입 : 메소드가 반환하는 값의 데이터 타입
자바의 인자 전달 방식
1. 기본 타입의 값 전달 (매개변수가 byte, int, double 등 기본 타입의 값일 때)
- 호출자가 건네는 값이 매개변수에 복사되어 전달, 실인자 값은 변경되지 않는다.
- 메소드의 매개변수가 변경되어도 호출한 실인자 값은 변경되지 않는다.
2. 객체 혹은 배열 전달
- 객체나 배열의 레퍼런스만 전달(객체 혹은 배열이 통째로 복사되어 전달되는 것이 아님)
- 메소드의 매개변수와 호출한 실인자 객체나 배열 공유
객체 전달(객체의 레퍼런스만 전달) : 매개 변수가 실인자 객체 공유
배열 전달(배열 레퍼런스만 매개 변수에 전달) : 배열 통째로 전달되지 않고 객체가 전달되는 경우와 동일,
매개 변수가 실인자의 배열을 공유
메소드 오버로딩(Overloading)
- 이름이 같은 메소드 작성(매개변수의 개수나 타입이 서로 다르고 이름이 동일한 메소드들)
- 리턴 타입은 오버로딩과 관련 없음
객체의 소멸과 가비지 컬렉션
객체 소멸
- new에 의해 할당된 객체의 메모리를 자바 가상 기계의 가용 메모리로 되돌려 주는 행위
자바 응용프로그램에서 임의로 객체 소멸할 수 없음
- 객체 소멸은 자바 가상 기계의 고유한 역할
- 자바 개발자에게는 매우 다행스러운 기능
가비지
- 가리키는 레퍼런스가 하나도 없는 객체(누구도 사용할 수 없게 된 메모리)
- 자바 가상 기계의 가비지 컬렉터가 자동으로 가비지 수집 반환
'언어 > Java' 카테고리의 다른 글
switch/case 문 (0) 2021.05.15 Java 조건문 & 반복문 (1) 2021.05.13 Java 연산자 (2) 2021.05.09 Java Scanner 클래스 (0) 2021.05.09 Java 변수와 자료형 (2) 2021.05.08