본문 바로가기

책 내용 정리/스프링 입문을 위한 자바 객체 지향의 원리와 이해

스프링 입문을 위한 자바 객체 지향의 원리와 이해

이 책은 스프링 입문을 위한 내용, 즉 자바의 객체 지향의 원리에 대해 풀었다. 자바의 메커니즘을 제대로 이해하고 바람직한 객체지향설계에 대한 감을 잡을 수 있었다. 처음 객체지향에 대해 알게 되었을 때 만큼 많은 것을 깨닫는 느낌이었다. 이제 막 자바 생태계에 입문하거나 스프링 학습을 시작하는 이에게 권한다.

 

 

 

 

객체지향의 4대 원칙 중 상속은 영어 단어를 그대로 옮기면서 생긴 오해가 있다. 

 

 

위 그림처럼 객체 지향의 상속은 계층도가 아니라 밑의 그림처럼 분류도 이다.

 

아버지는 할아버지이다. (X)

but

고래는 포유류이다. (O)

 

그래서 자바 언어에는 inherits 라는 키워드는 없다. -> extends 를 사용한다.

( 상속이 아닌 확장, 세분화 라고 이해하자. )

 

상속은 is a 관계가 아니라 is a kind of 관계이다. 

>>>134쪽.

 

객체생성자 ( 내가 아는 그 생성자 ) 가 있듯이 클래스 생성자도 있을거라 기대해볼만하다. 클래스 생성자는 없지만 클래스가 스태틱 영역에 배치될 때 실행되는 코드블록이 있다. 바로 static 블록이다.

public class 동물{

    static {

        sout("멍멍");

}}

 

- 객체 멈버는 클래스가 static 영역에 자리 잡은 후에 객체 생성자를 통해 힙에 생성된다.

static 블록에 올라간 클래스가 제일 처음 사용될 때는 다음 세 가지 경우 중 하나다.

1. 클래스의 정적 속성을 사용할 때

2. 클래스의 정적 메서드를 사용할 때

3. 클래스의 인스턴스를 만들 때

 

메모리는 최대한 늦게 사용을 시작하고 최대한 빨리 반환하는 것이 정석이다. 따라서 프로그램이 실행 될 때 바로 클래스들의 정보를 T 메모리의 static 영역에 로딩하지 않고 해당 클래스가 처음 사용될 때 로딩한다.

( 물론 static 블록은 한 번 올라가면 프로그램 종료까지 반환하진 않는다. )

 

- 인터페이스는 추상 메서드와 정적 상수만을 가진다. ( 자바 8 부터는 디폴트 메서드도 가질 수 있긴함. )

 

 

- 메서드의 메모리 구조에 대한 좋은 이야기

 

>>>190p

 

 

단일책임원칙 ( SRP ) 와 인터페이스 분할 원칙 (ISP) 중 SRP가 더 좋다. 왜냐하면 인터페이스 최소주의원칙

=> 인터페이스를 통해 메서드를 외부에 제공할 때는 최소한의 메서드만 제공하라!!!!!

-> 상위 클래스는 풍성할수록 좋고, 인터페이스는 작을수록 좋다.

( 왜 풍성 할 수록 좋을까? 업캐스팅 시 상위클래스의 참조변수로 더 많은 멤버에 접근 할 수있다. ( 업캐스팅 시 자식클래스의 멤버에 접근 불가 )

 

 

 

 

 

Recent Posts
Popular Posts
Recent Comments