객체지향5원칙 면접 질문 답

객체지향 5원칙 중 한 가지를 답해보세요 단일책임 / 개방-폐쇄 / 리스코프 치환 / 인텉페이스 분리 / 의존 역전

1. 단일 책임 원칙

단일 책임 원칙은 클래스는 하나의 책임만 가져야 한다는 원칙입니다.

예를 들어 Employee 클래스가 직원 정보, 관리, 급여 계산, DB 저장을 모두 담당하게 되면 SRP 단일 책임 원칙에 위반하게 됩니다. Employee가 아닌 급여, DB 등의 정책이 바뀌면 Employee class를 수정해야하기 때문입니다. 따라서 Employee는 직원 정보만 책임지고 나머지 기능은 책임을 분리해야 합니다 그렇게 분리하게되면 유지보수와 코드 변경 시 다른 기능에 영향을 주지 않기 때문입니다.


꼬리

“어떻게 책임을 나누나요?” -> 클래스 이름으로 설명할 수 있는 하나의 역할만 맡도록 분리해야합니다.

“왜 중요한가요?” -> 코드 변경 시 다른 기능에 영향을 주지 않아 안전하고, 테스트하기도 쉬워집니다.


2. 개방-폐쇄 원칙

OCP 개방-폐쇄 원칙은 확장에는 열려있고 변경에는 닫혀있어야 한다는 원칙입니다 실제로 개인 프로젝트를 진행하면서 예외 처리에서 활용을 했습니다. FigureException이라는 추상 클래스를 만들고, 새로운 예외 상황이 생길 때마다 NotFoundFigureException 같은 구체적인 예외 클래스를 상속받아 추가했습니다.

이렇게 하면 기존 공통 예외 처리 코드 로직은 그대로 두고, 새로운 상황에 맞는 구체적인 예외 처리 코드만 추가할 수 있어서 유지보수가 쉬워지고, 가독성 또한 높아졌습니다.

3. 리스코프 치환 원칙

LSP 리스코프 치환 원칙은 하위 객체는 상위 타입 객체에서 가능한 행위를 수행 할 수 있어야 한다. 즉, 상위 타입 객체를 하위 타입 객체로 대체하여도 정상적으로 동작해야 한다.

프로젝트에서는 예를 들어 FileUpload 에 관하여 사용할 수 있습니다. 기존 로컬 파일 업로드 방식에서 AWS S3 방식을 추가하게 된다면 기존 컨트롤러 서비스를 수정할 필요없이 FileUpload Interface 만들어서 각각의 구현체를 분리해서 유지보수 할 수 있습니다.

4. 인터페이스 분리 원칙

ISP 인터페이스 분리 원칙은 클라이언트는 자신이 사용하는 메서드에만 의존해야 한다. 특정 클라이언트를 위한 인터페이스는 여러 개가 범용 인터페이스 한 개보다 낫다. 인터페이스는 해당 인터페이스를 사용하는 클라이언트를 기준으로 잘게 분리되어야 한다.

프로젝트에서는 이벤트 처리와 알리 시스템에 많이 활용합니다.

5. 의존 역전 원칙

DIP 의존 역전 원칙은 구체적인 클래스가 아닌 인터페이스에 의존하라는 원칙입니다. 실무에서는 결제시스템, 알림 발송, 파일 업로드 등에서 인터페이스를 사용할 수 있고 생각보다 모든 클래스에 인터페이스로 만드는 것은 쉽지않다고 느끼고 필요한 부분에 적용하는것이 현실적이라고 생각합니다.