[JAVA] SOLID 원칙

chaentopia·2024년 4월 10일
0

NOW SOPT SERVER 과제

목록 보기
5/14

1차 세미나

객체 지향 프로그래밍을 한번이라도 공부했다면 다 들어봤을 SOLID 원칙입니다! 저도 SOLID를 Swift 공부할 때 배웠는데요, 이번 키워드 과제에서도 SOLID가 나와있어서 다시 한 번 보도록 하겠습니다.

SOLID는

  • SRP (Single Responsibility Principle) - 단일 책임 원칙
  • OCP (Open Closed Principle) - 개방 폐쇄 원칙
  • LSP (Listov Substitution Principle) - 리스코프 치환 원칙
  • ISP (Interface Segregation Principle) - 인터페이스 분리 원칙
  • DIP (Dependecy Inversion Principle) - 의존 역전 원칙

의 앞글자를 따서 만든 객체 지향 설계의 5개 원칙입니다.


SRP (Single Responsibility Principle) - 단일 책임 원칙

한 클래스는 하나의 책임만 가져야 한다.

모든 클래스는 각각 하나의 책임만 가져야 하며, 수정할 이유는 한 가지여야 한다는 원칙입니다. 즉, 클래스는 그 책임을 완전히 캡슐화 해야 한다는 의미인데요, 학생에 대한 클래스가 있다면 이는 학생에 대한 것만 해결해야 한다는 뜻입니다.


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

확장에 대해서는 열려 있어야 하지만 변경에 대해서는 닫혀 있어야 한다.

컴포넌트, 클래스, 모듈, 함수 등 소프트웨어 요소는 확장에는 열려 있어야 하지만, 변경에는 폐쇄적이어야 합니다. 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계가 가능하도록 하는 원칙인데요, 변할 수 있는 부분은 추상화하며 상속하는 클래스가 의존할 수 있도록 작성해야 합니다. 때문에 변할 부분과 변하지 않을 부분을 명확히 구분해야 합니다.

LSP (Listov Substitution Principle) - 리스코프 치환 원칙

서브 타입은 언제나 자신의 기반 타입으로 변경할 수 있어야 한다.

부모 클래스에 들어갈 자리에 자식 클래스를 넣어도 문제가 없어야 하며, 이는 상위 타입이 항상 하위 타입으로 대체될 수 있음을 이야기합니다.

  • 하위 클래스는 상위 클래스의 한 종류이고
  • 구현 클래스는 인터페이스 할 수 있어야 합니다.

ISP (Interface Segregation Principle) - 인터페이스 분리 원칙

클라이언트는 자신이 사용하지 않는 메소드에 의존 관계를 맺으면 안 된다.

인터페이스 분리 원칙은 각 역할에 맞게 인터페이스로 분리하는 것으로, 인터페이스 내에 메소드는 최소한 일수록 좋으며, 최소한의 기능만을 제공하면서 하나의 역할에 집중하도록 하는 원칙입니다. SRP와는 같은 문제에 대한 해결책이라고 불 수 있습니다. 그러나 일반적으로는 ISP보단 SRP 할 것을 권장합니다.


DIP (Dependecy Inversion Principle) - 의존 역전 원칙

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

구현 클래스에 의존하지 말고 추상화된 인터페이스에 의존하라는 의미입니다. 구현 클래스에 의존하게 된다면 변경이 어려워지기 때문에 인터페이스를 적극적으로 활용해야 합니다. 인터페이스에 의존하게 된다면 변경 사항이 생겼을 때라도 구현부가 영향을 받지 않습니다.

profile
the pale blue dot

0개의 댓글