반응형
자바 객체지향의 원리와 이해 - 김종민

 

전에 봤던 Good Java 보다 한 단계 수준 높은 책이다. 왜냐하면 Good Java에서는 자세한 설명과 이미지로 이해를 쉽게 하여 입문 개발자를 위한 책이었다.

이책의 제목에서 처럼 자바 입문이 아닌 스프링 입문을 위한 책이다. (스프링 입문을 위한 자바 객체지향의 원리와 이해)

그럼에도 불구하고 객체지향의 원리와 구조적 방법과의 차이 등을 자세하게 설명한다.

특히 객체지향 프로그래밍의 특징중 하나인 추상화를 설명할때 일반적으로 추상하면 떠오르는 피카소와 이집트의 벽화를 예로 들면서 일반적인 개념에서 프로그래밍적인 개념으로의 이해를 돕고 있다.

 

뒷 부분으로 가면서 스프링을 이용한 실질 적인 프로그래밍 패턴과 코드 설명 등이 자세하게 나온다.

뒷부분의 스프링 관련 내용은 많은 내용을 담고 있어서 모두 이해하지는 못했다.

 

 

 

OOP의 4대 특성 = 캡, 상추다.

 

캡술화 - Encapsulation : 정보 은닉(information hiding)

상속 - inheritance : 재사용

추상화 - Abstraction : 모델링

다형성 - Polymorphism : 사용 편의

 

 

객체 지향 설계 5대 원칙 = SOLID

1. SRP (Single Responsibility Principle) : 단일 책임 원칙

   ==> 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다 - 로버트 C. 마틴

 

2. OCP (Open Closed Principle): 개발 폐쇠 원칙

   ==> 소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다 - 로버트 C. 마틴  -> 다른말로: 자신의 확장에는 열려 있고, 주변의 변화에 대해서는 닫혀 있어야 한다.

 

3. LSP ( Liskov Subsitution Principle) : 리스코프 치환 원칙

  ==> 서브 타입은 언제나 자신의 기반 타입으로 교체할 수 있어야 한다. - 로버트 C. 마틴

  --> 다른말로: 하위 클래스 is a kind of 상위 클래스 - 하위 분류는 상위 분류의 한 종류다.

                    구현 클래스 is able to 인터페이스 - 구현 분류는 인터페이스할 수 있어야 한다.

 

4. ISP (Interface Segregation Principle): 인터페이스 분리 원칙

  ==> 클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다 - 로버트 C. 마틴

        다른말로 : 단일 책임원칙(SRP)과 인터페이스 분리원칙(ISP)은 같은 문제에 대한 두 가지 다른 해결책이라고 볼수 있음

        한 남자에게 많은 역할 책임을 주지말고 남자를 역할별로 분리하거나, 역할별로 인터페이스를 만들어서 해결 

 

5. DIP (Dependency Inversion Principle): 의존 역전 원칙

  ==> 고차원 모듈은 저차원 모듈에 의존하면 안된다. 이 두 모듈 모두 다른 추상화된 것에 의존해야 한다.

  ==> 추상화된 것은 구체적인 것에의존하면 안 된다 구체적인 것이 추상화된 것에 의존해야 한다.

  ==> 자주 변경되는 구체(Concrete) 클래스에 의존하지 마라

  --> 다른말로 : 자신보다 변하기 쉬운 것에 의존하지 마라

 

 

06장 스프링이 사랑한 디자인 패턴

스프링 : 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크

 

디자인 패턴은 객체 지향의 특성 중 상속(extends), 인터페이스(interface/implements), 합성(객체를 속성으로 사용)을 이용한다.

 

어댑터 패턴(Adapter Pattern)

   데이터베이스 시스템을 공통의 인터페이스인 ODBC 또는 JDBC를 이용해 조작하는 것과 같은 구조 패턴

 

프록시 패턴(Proxy Pattern)

   다른 누군가를 대신해서 그 역할을 수행하는 대리자/대변인을 만들어 사용하는 구조

 

데코레이터 패턴(Decorator Pattern)

   메서드 호출의 반환값에 변화를 주기 위해 중간에 장식자를 두는 패턴

 

싱글턴 패턴(Singleton Pattern)

   인스턴스를 하나만 만들어 사용하기 위한 패턴

 

템플릿 메서드 패턴(Template Method Pattern)

   상위 클래스의 견본 메서드에서 하위 클래스가 오버라이딩한 메서드를 호출하는 패턴

 

팩터리 메서드 패턴(Factory Method Pattern)

   팩터리 메서드란 객체를 생성해서 반환 하는 메서드

   오버라이드 된 메서드가 객체를 반환하는 패턴

 

전략 패턴(Strategy Pattern)

   클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴

   패턴의 3요소 (전략 객체, 컨텍스트, 클라이언트)

     : 전략 메서드를 가진 전략 객체, 전략 객체를 사용하는 컨텍스트, 전략 객체를 생성해 컨텍스트에 주입하는 클라이언트(제3자)

 

템플릿 콜백 패턴(Template Callback Pattern-견본/회신 패턴)

   전략을 익명 내부 클래스로 구현한 전략 패턴

 

그밖에

  스프링의 MVC의 경우 프론트 컨트롤러 패턴(Front Controller Pattern) 과 MVC 패턴(Model-View-Controller)을 활용하고 있다

 

 

 

 

07 스프링 삼각형과 설정 정보

 

POJO (Plain Old Java Object) 기반의 IoC/DI, AOP, PSA

IoC(Inversion of Control / 제어의 역전), DI(Dependency Injection / 의존성 주입)

 

AOP : Aspect-Oriented Programming : 관점/핵심 지향 프로그래밍

 

PSA : Portable Service Abstraction : 일관성 있는 서비스 추상화

 

 

 

08 자바8 람다와 인터페이스 스팩 변화

 

빅데이터 지원을 위한 멀리코어 병렬분산 프로그래밍을 위한 개선 필요

 

빅데이터 지원을 위한 자바8변경사항

   빅데이터 지원 -> 병렬화 강화 -> 컬렉션 강화  -> 스트림 강화 -> 람다 도입 -> 인터페이스 명세 변경 -> 함수형 인터페이스 도입

 

람다란 코드블럭, 이를 변수로 활용 가능

람다 = 변수에 저장 가능한 로직

기존의 자바에서 로직은 메서드를 통해서만 구현이 가능했는데 이제 람다로 표현할 수도 있게 됨

 

 

반응형

+ Recent posts