반응형

[학습일지] Java & SpringBoot로 시작하는 웹 프로그래밍 : 자바 인강 7주차


 

7주차 학습내용

 

객체지향

디자인 패턴

 


객체지향

 

현실에 존재하는 물체를 모델링하기 위한 방법론이다.

절차 지향적인 프로그래밍 방법을 객체지향적인 프로그래밍 방법으로 발전시켰다.

 

물체를 객체로 정의하기 위해 해당 객체가 가지고 있는 특성을 분석하여

속성(변수)과 기능(메서드)으로 분리하여 모델링한다.

객체는 실체화된 개념일 수 있고, 추상적인 개념일 수도 있다.

 

상태 유지(속성)

객체는 해당 상태를 저장할 수 있어야 하고 그 상태를 유지해야 한다.

기능 제공(메서드)

객체는 다른 객체와 협력하기 위해 기능을 제공해야 한다.

고유 식별자

객체는 고유한 값을 갖고, 다른 객체와 식별될 수 있어야 한다.

 


 

객체지향의 4대 특성

 

캡슐화

객체의 상태인 속성은 기능을 통해 변경되어야 한다.

무의미한 값을 저장하지 않도록 무결성을 유지할 수 있다.

상속

객체를 구조화할 수 있다. 유지보수가 향상된다.

추상화

객체 간의 특성을 추출하여 추상화시킬 수 있다.

다형성

하나의 인스턴스가 여러 형태로 변화할 수 있다.

코드의 재사용성이 향상된다.

 


 

객체지향 설계의 5원칙(SOLID)

 

객체 간의 의존성은 낮추고, 책임지고 있는 기능에 집중해야 한다.

결합도는 낮추고, 응집도는 높인다.

 

단일 책임 원칙

하나의 객체가 여러 기능을 부담하지 않고, 객체가 하나의 기능에 집중하도록 분리해야 한다.

 

개방 폐쇄 원칙

변경되어야 하는 부분은 폐쇄적이어야 하고, 확장에는 개방되어야 한다.

인터페이스를 사용하면 손쉬운 확장이 가능하고, 클라이언트 코드의 변경도 없다.

 

리스 코프 치환 원칙

부모의 인스턴스가 사용되던 자리에 자식의 인스턴스가 사용된다면

기존의 부모 인스턴스가 갖고 있던 규칙을 자식이 위반하면 안된다. (오버라이딩시 위배가능성)

 

인터페이스 분리 원칙

인터페이스의 기능들을 하나의 인터페이스에 통합하지말고

인터페이스를 분리해서 구현체가 필요한 메서드를 가진 인터페이스만을 구현받도록 분리해야 한다.

 

의존 역전 원칙

의존 객체를 구체적인 구현체가 아닌 상위 추상적인 개념을 의존하게끔 설계해야한다.

 

 


디자인 패턴

 

싱글톤

 

 

생성자를 private로 만들어서 생성할 수 없게 한다.

싱글톤 패턴은 자기 자신을 속성으로 갖고 있다. getInstance 메서드를 통해 자기 자신인 속성을 가져온다.

getInstance가 static이므로 getInstance에서 이용해야 하는 자기 자신인 속성도 static으로 선언된다.

 


 

어댑터

 

 

관련이 없는 두 인터페이스를 중간에서 어댑터가 바꿔치기하여 연결시켜주는 디자인 패턴이다.

기존 인터페이스가 A이고, A 인터페이스를 사용하는 위주로 클라이언트 코드가 작성되었다고 할 때

B 인터페이스 새로 사용해야 한다면 B 인터페이스를 A 인터페이스로 중간에서 교체하는 어댑터를 만들어 줄 수 있다.

 

어댑터는 A 인터페이스를 구현하고, B 인터페이스를 속성으로 받아

A 인터페이스들의 메서드를 호출하면, A메서드를 오버라이딩해서 B 인터페이스 메서드를 대신해서 호출시켜주면 된다.

 


 

프록시

 

 

스프링 프레임워크에서 AOP로 프록시 패턴을 사용한다.

프록시가 인터페이스인 GameInterface를 구현하고, 실제 구현체인 GameService를 속성으로 갖는다.

 

클라이언트 코드에서 직접 GameService를 사용하지 않고 Proxy를 통해 사용한다.

Proxy는 GameService의 메서드를 호출을 하는데, 이때 앞과 뒤로 추가적인 작업이 가능해진다.

 


 

데코레이터

 

상속관계를 통해 super키워드를 이용하여 부모의 메서드를 호출하여

실행 결과를 반환받는 디자인 패턴이다.

 

호출은 (자식 -> 부모) 순으로 호출되며

실행은 (부모 -> 자식)으로 나오게 된다.

 

 


 

옵저버

 

 

변화가 일어날 때 등록해둔 옵저버(인스턴스)들에게 모두 알려주는 것이다.

옵저버를 등록시키고, 특정 함수가 동작할 때 옵저버의 기능이 동작하도록 한다.

 


 

파사드

 

클라이언트 코드가 복잡한 (여러 클래스)들의 기능을 일련의 과정으로 사용할 때

(클라이언트 코드)와 (여러 클래스) 사이에 (파사드 객체)를 두어

파사드 객체가 각 클래스들이 복잡하게 호출되는 일련의 과정을 메서드로 제공한다.

 

클라이언트 코드는 파사드 객체가 제공하는 간단한 메서드를 사용하게 하는 방식이다.

 


 

전략

 

가장 보편적으로 사용되는 패턴으로 

클라이언트 코드단에서 인터페이스를 구현한 구현체 부분을 전략으로 선택하여

선택한 전략 구현체를 사용하는 방법이다.

 

생성자를 인수를 인터페이스로 지정하여 내부 동작들은 인터페이스의 메서드를 사용하여구현체인 인스턴스의 메서드로 동작시키는 것

 

 


 

반응형

+ Recent posts