https://github.com/codingspecialist/javahigh-oop.git
static은 main 메서드가 실행되기 전에 메모리에 단 한번 로드되기 때문에 프로그램이 실행되는 동안 두 번 메모리에 로드하는 방법은 없다.
태양이 static 메모리 공간에 정적 할당된다면! - 두 번 생성할 수 없다.
인간은 heap 메모리에 공간에 동적 할당된다. - 계속 생성할 수 있다
stack 메모리는 가장 짧은 생명주기를 가지는 메모리 공간이다.
메서드가 호출될 때 잠깐 할당되었다고, 메서드가 종료될 때 사라지기 때문에 관리가 필요 없다.
https://github.com/codingspecialist/javahigh-oop.git
소나타 클래스 자동차
new 하기 (자동차를 태어나게 하기) 우선 자동차가 이 세상에 존재해야 한다.
constructor 사용하기 (자동차가 태어날 때) 자동차가 처음에 생성될 때 생성자를 통해 엔진파워와 색상을 초기화 한다.setter 사용하기 (자동차가 태어난 뒤) 기어를 변경하면 기어 상태를 변경할 수 있다. 전진 or 후진 엑셀을 밟으면 속력의 상태를 변경할 수 있다.
엔진파워와 색상에 대한 setter가 필요한가? setter란 무엇일까? setter는 오브젝트의 상태 변화가 필요할 때 만드는 것이다.
https://github.com/codingspecialist/javahigh-oop.git
상속(inheritance)이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미
상속에 목적은 추상화에 있다. 재사용에 있지 않다.
상속의 목적은 추상화이고, 메서드 혹은 변수의 재사용은 추상화를 했기 때문에 얻어지는 부가적인 효과일 뿐이다.즉, 재사용을 위해서 상속을 사용하지 않는다.
상속을 하게 될 때 메모리 구조가 어떻게 될까?
다형성(polymorphism)이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미
잘 만들어진 동물 클래스가 있다면, 사자 클래스를 만들 때, 동물 클래스를 상속 받아 만들면 편하게 만들 수 있다.
왜냐하면 상속을 하면 부모가 만들어 둔 메서드나, 변수를 재사용할 수 있기 때문이다.
하지만, 잘 만들어진 엔진 클래스를 자동차가 상속해서 사용하면 안된다. 그 이유는 다형성이 성립하지 않기 때문이다.
다형성을 통해 DIP를 지킬 수 있다.
DIP는 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것에 의존하기 보다는, 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 원칙 (Dependency inversion principle)
기존 클래스가 새로운 클래스의 구성요소가 되는 것