원칙, 패턴

bomb·2023년 12월 1일

[Solid]
S(SRP) : 단일 책임 원칙
- 하나의 클래스는 하나의 책임만 가져야 합니다.
- 클래스가 변경되어야 할 이유는 단일한 책임을 변경하기 위한 것이어야 합니다.

O(OCP) : 개방 폐쇄 원칙 - 새로운 기능이 추가되면 기존 코드를 변경하지 않고 새로운 코드를 추가할 수 있어야 합니다.
- 확장에는 열려있고 변경에는 닫혀있어야 한다.
- 핵심 : 추상화와 다형성 (인터페이스의 추상화와 상속받은 클래스에서 재정의)

L(LSP) : 리스코프 치환 원칙 - 하위 타입은 언제나 상위 타입으로 교체 가능해야한다.
- 자식 클래스는 부모 클래스의 기능을 보장한다.(부모, 자식 클래스 사이에 일관성이 있다)
- 예시 : 직사각형 클래스를 정사각형 클래스로 상속받을때 넓이가 (가로x세로) 가 아닌 (한변x한변)으로 계싼되는 점

I(ISP) : 인터페이스 분리 원칙
- 하나의 큰 인터페이스보다 여러개의 인터페이스가 낫다.
- 인터페이스에는 필요로하는 메서드만을 제공해야 한다.

D(DIP) 의존 역전 원칙 (Dependency Inversion Principle - DIP)
: 의존성은 추상화(인터페이스, 추상 클래스)를 통해 이루어져야하며, 구체적인 구현체에 의존하면 안된다

[생성패턴]
팩토리패턴

  • 객체를 생성하는 인터페이스는 미리 정의하되, 객체 생성은 서브 클래스(팩토리)로 위임하는 패턴
    장점 : 수정에는 닫혀있고 확장은 쉽다
    사용 : 어떤 클래스가 생성해야 하는 객체의 클래스 예측할 수 없을 때, 생성할 객체를 기술하는 책임을 서브클래스에게 정의하하고자 할 때
    단점 : 구현 객체의 종류가 추가될 때마다 코드량이 증가한다.
  • 추상 팩토리 패턴과 팩토리 패턴과 차이 : 팩토리 메서드 패턴은 각각 다른 객체들이 필요할 때 사용하며,
    추상 팩토리 패턴은 서로 연관 있는 객체들의 조합이 필요할 때 사용한다.
  1. 추상팩토리 패턴
  • 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴
    출처: https://fvor001.tistory.com/63 [Dev Log:티스토리]

2.빌더패턴

  • 생성자에 들어갈 매개변수를 메서드로 하나씩 받아들이고 마지막에 통합빌드해서 객체 생성하는 방식
    장점 : 디폴트 매개변수 역할을 하게 할 수 있음, 어떤 인자에 어떤 값이 들어가는지 알아서 실수 줄어듬, 불변객체 생성
    단점 : 생성자보다는 성능 떨어짐
  1. 팩토리 메서드 패턴
  • 객체를 생성하는 인터페이스는 미리 정의하되, 객체 생성은 서브 클래스(팩토리)로 위임하는 패턴
    https://bcp0109.tistory.com/367
  1. 프로토타입 패턴
  • 비슷한 객체를 반복해서 생성하는 것보다 기존에 생성된 객체를 복제하여 새로운 객체를 생성하는 방식
    사용 : 객체의 생성 비용이 높을 때 JAVA에서 clone메서드 제공한다.
  1. 싱글톤 패턴
  • 객체의 인스턴스가 오직 1개만 생성되는 패턴
    장점 : 싱글톤 인스턴스는 전역으로 사용되기 때문에 데이터 공유가 쉽다, 생성을 1번만 하므로 메모리 낭비 방지
    단점 : 자식 클래스를 만들 수 없고, 내부 상태 변경하기 어려움.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

[구조 패턴]
4. 프록시 패턴

  • 객체에 대한 인터페이스를 제공하여 해당 객체에 대한 접근을 프록시 객체로 제어하거나 대리할 수 있도록 하는 패턴
    장점 : 실제 객체에 접근이 아닌 프록시 객체를 통해 간접 접근하므로 보안 강화, Lazy Loading을 통해 객체 생성비용 아낌.
    단점 : 빈번한 객체 생성이 일어나면 성능이 저하됨(객체 생성할때 한단계 거침)

0개의 댓글