SOLID

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

  • 객체는 하나의 책임만 맡아야 한다
  • 책임을 분명히 해서 변경이 다른 책임에 전가되지 않게 한다
  • 복잡도가 줄어 버그에 대처할 수있다
  • 응집도는 높게 결합도는 낮게 설계하는 것

    책임을 나누지 않으면
    모듈마다 연결된 것이 많고, 테스트가 많고, 그래서 버그가 증가할 수 있다.

2. 개방폐쇄원칙(OCP : Open-Closed Principle)

  • 모듈은 확장에는 열려있어야하고, 변경에는 닫혀있어야 한다.
  • 공통적인 기본 기능은 변경할 필요가 없고 특정 클래스에서 기본기능을 각각 재정의한다
  • 인터페이스를 만들고(close) 각각의 클래스에서 재정의(open)

3. 리스코프 대체의 원칙(LSP : Liskov Substitution Principle)

  • 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있다는 원칙
    부모 글래스가 들어갈 자리에 자식 클래스를 넣어도 잘 작동해야 함
  • 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행

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

  • 범용 인터페이스를 여러 개의 인터페이스로 세분화한다
  • 의존성을 약화시킨다
  • 클래스는 필요없는 기능은 구현하지 않아야 한다

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

  • 구체화된 클래스가 아닌 인터페이스나 추상 클래스에 의존해야 한다
  • 변화하기 쉬운 것으로부터의 의존을 줄인다
  • 추상 클래스나 인터페이스는 변화가 거의 없다

다형성

목적

  • 여러 형의 객체에 동일한 코드 사용을 위해(재사용성⬆️)
  • 매개변수를 다르게 하여 오버로딩
  • 가장 가까운 재정의(오버라이딩)된 메서드 선택

    오버 로딩

    • 같은 연산자로 다른 목적의 연산에 이용
    • 매개변수를 다르게 구성할 수 있다
    • 정적 다형성의 예

하위 클래스 메서드의 선택

  • 하위 클래스로부터 만들어진 객체
    • is-a 관계에 의해 부모 클래스 자료형 사용 가능
      Animal animal = new Cat(); // 상위 타입 참조변수로
      Barkable barkable - new Cat(); 인터페이스를 데이터 타입으로
    • 상위 타입 참조변수 사용시, 하위 클래스가 오버라이딩한 고유의 기능은 사용할 수 없다

캐스팅

  • 업 캐스팅 : 상위 클래스에 하위 클래스 객체를 할당(=으로)
  • 다운 캐스팅 : 상위 클래스의 객체를 하위 클래스로 변환(명시적 형변환)

컬렉션 인터페이스와 구현 클래스

final 키워드를 통한 정의

  • 속성변수 -> 상수
  • 메서드 -> 오버라이딩 불가
  • 클래스 -> 상속 불가

상수

  • final 상수
    선언시 초기화를 해야하고 변경할 수 없다. 사용하려면 객체를 생성해야 함
    final int NUM = 10;

내부클래스의 반환과 인터페이스

디자인 패턴

profile
안녕하세요. Chat JooPT입니다.

0개의 댓글