[면접 대비/프로그래밍] 객체 지향 설계의 SOLID 원칙

AmeriKano·2023년 11월 12일
0

시작하며

이번 주제는 객체지향 프로그래밍에서 한번 쯤 들어보고, 실현하면 정말 이상적이라고 하지만 정말 실전에서 적용하기는 많은 노력이 필요한 것 같은 SOLID 원칙에 대해 정리해 봤다.
(자바 코딩 인터뷰 완벽 가이드 라는 책을 참고했다)


SOLID 원칙

SOLID란 프로그래머의 바이블이라 할 수 있는 클린 코드의 저자이기도 한 로버트 C. 마틴이 발표한 5가지의 객체지향 설계 원칙의 첫 글자를 순서대로 가져온 것이다.

S - 단일 책임 원칙

단일 책임 원칙(Single responsibility principle)은 하나의 클래스는 단 하나의 책임만 져야 한다는 의미를 뜻한다. 하나의 목표만을 위해 클래스를 작성한다면 유지보수 및 가시성을 높게 유지할 수 있게 된다.

O - 개방 폐쇄 원칙

개방 폐쇄 원칙(Open-closed principle)은 소프트웨어 컴포넌트는 확장에 관해 열려 있고 수정에 관해 닫혀 있어야 한다는 의미이다. 다른 개발자가 단순히 클래스를 확장하기만 해도 클래스의 동작을 수정할 수 있도록 클래스를 설계하고 작성해야 한다는 의미이다. 즉 수정이 필요한 제약 사향을 클래스에 포함해서는 안 되며, 다른 개발자가 이 클래스를 확장하기만 하면 원하는 작업이 가능하도록 만들어야 한다.

L - 리스코프 치환 원칙

리스코프 치환 원칙(Liskov substitution principle)은 미국의 컴퓨터 과학자 바바라 리스코프가 발표한 원칙으로, 파생 타입은 반드시 기본 타입을 완벽하게 대체할 수 있어야 한다는 의미이다. 즉, 모든 자식 클래스의 객체가 부모 클래스의 객체와 반드시 같은 방식으로 동작해야 한다. 이렇게 구현하면 타입 변환 후에 뒤따라오는 런타임 타입 식별에 유용하다.

I - 인터페이스 분리 원칙

인터페이스 분리 원칙(Interface segregation principle)은 클라이언트가 사용하지 않을 불필요한 메서드를 강제로 구현하게 해서는 안된다는 의미이다. 클라이언트가 사용하지 않을 메서드를 강제로 구현해야 하는 일이 없을 때까지 하나의 인터페이스를 2개 이상의 인터페이스로 분할해야 한다는 의미이다.

D - 의존관계 역전 원칙

의존관계 역전 원칙은 구체화가 아닌 추상화에 의존해야 한다는 의미이다. 구상된 모듈에 의존하는 새로운 구상 모듈 대신, 구상 모듈을 결합하기 위해 추상 계층에 의존해야 한다는 것이다. 이를 위해 모든 구상 모듈은 추상적인 내용만 노출해야 하며, 이를 통해 구상 모듈들은 분리된 상태를 유지하면서 다른 구상 모듈에 대해 확장할 수 있다.

예상 질문

구체화가 아닌 추상화에 의존해야 한다고 했는데, 그렇다면 객체지향에서 추상화의 개념은 무엇인가?

추상화란 객체지향 프로그래밍의 중요 개념 중 하나로, 객체지향 프로그래밍의 객체는 사용자에게 높은 수준의 작업 집합만 노출하고 이 작업의 내부 구현 내용은 숨겨야 합니다. 추상화하여 구현하면 사용자는 어플리케이션이 일을 수행하는 방법이 아닌 수행하는 일 자체에 집중할 수 있게 됩니다. 중요한 내용만 노출하여 복잡성을 줄이고 보안을 유지하게 되는 것입니다.

profile
똑똑한 사람이 되게 해주세요

0개의 댓글