jongheonleee / flow_java

자바에 대해 깊게 공부하기

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

🏊🏻‍♂️ flow_java



몰입할 때 참고했던 서적과 교육

📚 참고 서적 및 사이트

1. 자바의 정석 3판

도서 링크 : (https://product.kyobobook.co.kr/detail/S000001550352)

2. 이펙티브 자바

도서 링크 : (https://product.kyobobook.co.kr/detail/S000001033066)

3. 자바언어로 배우는 디자인 패턴 입문

도서 링크 : (https://product.kyobobook.co.kr/detail/S000200311846)

4. 남궁성의 백엔드 데브 캠프 1기(AI 융합)



📋 몰입 리스트

1. 데코레이터 패턴은 어떻게 해서 등장하게 된 것일까?

2. 자바의 지네릭스는 반쪽짜리 지네릭스?

3. String str = "Hello" 에서는 어떻게 해서 new 연산자를 쓰지 않고 String 객체를 쓸 수 있을까?

4. enum에 여러가지 객체를 저장하는 경우에는 어떻게 저장될까?

5. Vector는 동기화 처리가 되어 있는데 멀티 쓰레드 환경에서 에러가 발생하는 것일까?

6. 자바의 객체는 어떻게 생성될까(JVM)

7. 컴파일러를 최대한 활용한 코드란?(interface, abstract class)

8. <? extends T>와 <? super T> 의 차이는 무엇일까?



✍🏻 몰입의 결과!!


📌 01. 데코레이터 패턴은 어떻게 해서 등장하게 된 것일까?

👉 상속을 지양하고 포함관계를 사용하면서도 다형성을 적용하기 위해 "데코레이터"가 등장했다!!


(1) 자바에는 '상속' 개념이 있다

  • 상속 : 코드를 재사용하기 위함, 하위 클래스가 상위 클래스의 코드를 재활용하는 것

(2) 💥 상속의 문제점 : 하위에서 상위 내용을 정확하게 인지해야함 -> 캡슐화 파괴 발생 가능

  • Template Method는 하위에서 상위를 몰라도 되기 때문에 해당 문제와 관련 없음
    • 상위에서 큰 틀 잡고 하위에서 세부 내용 결정
  • 하위에서 상위의 멤버를 사용하는 경우, 해당 상위 클래스의 정보를 명확하게 알아야한다. 그래야 프로그래밍 오류가 발생하지 않음
  • 즉, 하위와 상위가 서로 엮어버렸기 때문에 캡슐화를 저해할 수 있다.
    • 하위를 통해서 상위를 접근하기 때문
    • 이런 문제 때문에, sealed class 개념이 등장함
      • sealed class : 자손의 개수를 제한하는 클래스, 외부에서 함부로 클래스 추가 못함, State 패턴과 유사함
  • 결과적으로 상속을 활용하면 캡슐화 파괴가 발생할 수 있다

(3) 🙋🏻‍♂️ 포함(composite)관계로 처리해보자! -> 하지만, 다형성이 적용 안돼...

  • 클래스의 관계는 크게 2가지가 있다.
    • 포함, 상속
  • 포함에는 크게 2가지로 구분된다
    • composite(A-B)/aggregation(A-List< B >)
  • 포함 관계를 통해 특정 코드를 주입 받아서 쓸 수 있지만 문제가 있다. 바로 다형성을 활용하지 못하는 것

(4) 포함(composition) & 다형성을 충족해보자!! -> 🎉 "데코레이터 패턴" 등장!! 🎉

  • 데코레이터 패턴의 핵심
    • 알맹이와 껍데기를 동일시한다. 즉 껍데기가 알맹이 행세할 수 있게 해준다
    • 동일시 취급하면서도 부가적으로 기능을 추가할 수 있게 해줌
    • '상속'과 '포함'을 동시에 처리

  • [데코레이터 적용된 코드]

🧑🏻‍🏫 요약

1. 상속은 캡슐화 파괴의 여지가 있다

2. 포함관계만을 활용하는 경우에는 다형성을 누리지 못한다

3. 포함과 다형성을 모두 충족 시키기 위해서 '데코레이터 패턴'이 등장했다.



📌 02. 자바의 지네릭스는 반쪽짜리 지네릭스?

About

자바에 대해 깊게 공부하기