본문 바로가기
💻 CS

객체 지향 프로그래밍 _ SOLID

by meLR 2024. 1. 21.

SOLID

단일 책임 원칙

모든 클래스는 단 한가지의 책임만을 갖고 클래스 안에 정의 되어있는 모든 기능은 하나의 책임을 수행하는데 집중되어있어야한다.

하나의 클래스로 너무 많은 일을 하지 말고 딱 한가지 책임만 수행하자

god object: 너무 많은 책임을 지니고 있는 객체

 

한 클래스는 한가지 책임에 관한 변경사항이 생겼을때 코드를 수정할수있도록 하자

 

 

개방폐쇄 원칙

클래스는 확장에 열려있어야 하며 수정에는 닫혀있어야한다.

기존 클래스의 코드를 수정하지 않고도 기능을 확장할 수 있어야한다.

 

 

리스코프 치환 원칙

부모클래스의 인스턴스를 사용하는 위치에 자식 클래스의 인스턴스를 대신 사용했을 때 코드가 원래 의도대로 작동해야 한다.

  1. 형식적인 측면 : 자식클래스가 오버라이딩하는 변수와 메소드가 부모클래스에 있는 형식과 일치해야한다. 변수는 타입 메소드는 파라미터와 리턴값의 타입및 갯수
  2. 내용적인 측면 : 자식 클래스가 부모 클래스의 메소드에 담긴 의도 그러니까 부모 클래스의 행동 규약을 위반하지 않는것

상속관계를 설정할때는 리스코프 치환원칙을 생각하며 작성하자 안그러면 협력 프로젝트 후반에 가서 문제가 생길수 있다.

 

 

인터페이스 분리 원칙

지나치게 많은 추상 메소드를 가진 거대한 인터페이스 하나를 관련된 추상 메소드들만 모여있도록 작은 크기의 인터페이스로 분리하는 원칙

⇒ 지나치게 큰 인터페이스는 그걸 상속하는 클래스가 자신에게 필요하지도 않은 메소드를 굳이 오버라딩 하도록 만들기 때문

 

역할 인터페이스 : 서로 관련성이 높은 적절한 개수의 추상 메소드들을 포함하게 될 때

⇒ 큰 인터페이스 하나가 있는 것보다 작은 역할 인터페이스가 여러개 있으면 각 클래스가 본인에 해당하는 인터페이스만 적절히 상속 받게되며 각 클래스가 어떤 기능을 갖는지 더 세밀하게 파악가능

일반 메소드가 없고 추상 메소드로만 이루어진 인터페이스는 다중 상속을 해도 된다.

 

의존관계 역전 원칙

 

상위모듈은 하위 모듈의 구현내용에 의존하면 안된다. 상위 모듈과 하위모듈 모두 추상화된 내용에 의존해야한다.

상위모듈이 하위모둘을 사용할때 직접 인스턴스를 가져다가 쓰지 말자

 

상위 모듈과 하위 모듈사이에 추상화 레이어를 만들어 이를 해결하자

  1. 상위 모듈에는 추상 클래스의 자식클래스의 인스턴스를 사용한다는 가정하에 그 하위모듈을 사용하는 코드를 작성해주면 되고
  2. 하위모듈은 추상클래스의 추상 메소드들을 구현(오버라이딩)만 하면된다.

상위 모듈 : 다른 클래스를 사용하는 주된 클래스, 보통 프로그램의 메인 흐름에 좀더 가까움

하위 모듈: 사용되는 클래스 메인흐름에서 상대적으로 좀 더 멀리있음

 

이러한 의존관계 역전 원칙은 개방폐쇄 원칙을 지키는 방법중 하나이다.