- 클래스를 정의하는 방법
- 객체를 만드는 방법(new 키워드 이해하기 )
- 메서드 정의하는 방법
- 생성자 정의하는 방법
- 객체들의
협력 관계를 코드로 옮기는 과정이다. - 협력에 참여하여
메세지를 주고 받는 객체를 만드는데 필요한 구현 메커니즘이다. - 크게
속성(변수)과행위(메서드)를 가지게 된다.
class Car {
private String carName;
private boolean power;
//객체 타입도 변수로 가질 수 있다. (인스턴스 변수)
private Engine engine;
private Tire tire;
//2. 생성자를 선언해야 객체가 생성된다.
public Car(String carName, Engine engine, Tire tire) {
this.carName = carName;
this.power = false;
this.engine = engine;
this.tire = tire;
}
public void powerOn() {
this.power = !this.power;
}
}
interface Engine {}
class BenzEngine implements Engine {}
interface Tire {}
class MicherinTire implements Tire {}클래스명 변수명 = new 클래스명();
- 클래스로 정의된 내용을 토대로
실체화하는 작업 - 인스턴스화는
new연산자를 통해서 이루어진다. - 인스턴스화 과정
- new연산자가 메모리 영역에 저장 공간을 할당받음.
- 생성자(Constructor)가 인스턴스를 초기화.
- new연산자가 생성된 인스턴스의 메모리 주소를 변수에 저장
- 변수 내에 저장된 메모리 주소를 통해 객체에 접근.
-
클래스 타입의 인스턴스를 생성해주는 연산자
-
Heap 영역에 공간 할당 및 참조값을 객체에게 반환해주는 역할-
Heap영역은 런타임에 동적으로 변경되는 데이터를 저장한다. -
만약 참조값을 할당하지 않는다면?
-
참조 변수를 선언하지 않으면,
GC혹은프로그램 종료시 사라진다.//참조변수를 선언하지 않은 경우 new AirBnbProject(); //참조변수 할당 경우 AirBnbProject airBnbProject = new AirBnbProject();
-
-
-
1-2의 인스턴스화 예제
Engine benzEngine = new BenzEngine(); Tire micherineTire = new MicherinTire(); Car teslaCar = new Car("쿠퍼의 테슬라", benzEngine, micherineTire);
- 메서드는
선언부와실행블록으로 정의한다.- 선언부 : 리턴타입, 메서드 이름, 매개변수
- 실행블록 : 메서드를 구현하는 부분
- 메서드는 오버라이딩과 오버로딩이 가능하다.
- 오버라이딩(overriding) : 메서드의 구현부를 다시 정의하는 내용
- 오버로딩(overloading) : 메서드
이름과 기본적인 로직은 유지하고매개변수 or 타입이 달라지는 것.
생성는 인스턴스 초기화를 담당하는 메서드의 한 종류.
-
생성자 선언 시, 조건
-
생성자의 메서드명은
클래스명과 동일해야 한다. -
생성자는 리턴값이 없다.
-
-
생성자 선언 특징
-
class 내부에 생성자를 별도로 선언하지 않을 경우, 컴파일러에서
default 생성자를 생성한다.-
default 생성자 : 매개인자가 없는 생성자
-
별도로 생성자를 선언할 경우, default 생성자는 생성되지 않는다.
class Car { private String carName; private boolean power; //객체 타입도 변수로 가질 수 있다. (인스턴스 변수) private Engine engine; private Tire tire; /* - 없으면 compiler가 만들어준다. public Car () { } */ //이것도 defualt constructor이다. //별도로 생성자를 선언하면 컴파일러에서 default constructor를 생성하지 않는다. public Car () { this.carName = "cooperCar"; this.engine = new BenzEngine(); this.tire = new MicherinTire(); } }
-
-
생성자 오버로딩
- 생성자도 일종의 메서드이기 때문에 오버로딩이 가능하다.
- 오버로딩 :
메서드 이름그대로,매개변수는 다르게
class Car { private String carName; private boolean power; private Engine engine; private Tire tire; public Car () { this.carName = "cooperCar"; this.power = false; this.engine = new BenzEngine(); this.tire = new micherinTire(); } //오버로딩된 생성자. public Car (String carName, Engine engine, Tire tire) { this.carName = carName; this.engine = engine; this.tire = tire; } }
-
this : 자신의 인스턴스의 주소를 가리키는 참조 변수
public class Main { public static void main(String[] args) { Car cooperCar = new Car(); System.out.println(cooperCar); System.out.println(cooperCar.getThis()); } }
instance_practice.Car@29453f44 instance_practice.Car@29453f44
-
this() : 자신의 생성자
class Car { private String carName; private boolean power; private Engine engine; private Tire tire; public Car (String carName, Engine engine) { this.carName = carName; this.engine = engine; this.tire = new MicherinTire(); } public Car (String carName, Engine engine, Tire tire) { this(carName, engine); this.tire = tire; } public Car getThis() { return this; } }
-