[기술면접] SOLID

spixychz·2025년 6월 26일

기술면접

목록 보기
2/13

SOLID

객체지향 설계에서 지켜줘야할 5개의 개발원칙에 대해 알아보자.


단일 책임 원칙

Single Responsibility Principle

하나의 클래스는 하나의 기능만 가지는 것이 좋다.

ex) 자동차라는 클래스를 설계할 때, 자동차 클래스를 만들고 엔진 기능 + 시트 기능 + 에어컨 기능 + ... 하지마라.
대신! 엔진은 엔진 클래스를 만들고, 시트는 시트 클래스를 만들고...
자동차 클래스는 이 클래스들을 묶는 역할만 하자.

=> 유지보수성을 높인다!

개방 폐쇄 원칙

Open Closed Principle

기능을 추가할 때, 기존 코드를 수정하지 않고 추가할 수 있어야 한다.

ex) 동물 클래스를 만들어보자. 그 내부에는 울기 메소드가 정의되어 있다. 해당 메소드를 실행하면 고양이는 야옹, 강아지는 멍멍이라고 정의되어 있다.
이 때 새로운 동물이 추가되면 울기 메소드는 수정될 수 밖에 없다....
대신! 동물을 상속받는 하위 클래스로 고양이 클래스, 강아지 클래스를 만들고 자식 클래스에서 울기 메소드를 정의하자.

=> 다형성과 확장의 장점 극대화!
abstract

리스코프 치환 원칙

Listov Substitution Principle

자식 클래스는 부모 클래스로 대체되어도 프로그램이 정상 동작해야 한다.

ex) 새 클래스를 정의하고 날기 메소드가 정의되어 있다. 펭귄 클래스는 새 클래스를 상속받고 있다. 새 클래스에서 날기 메소드를 실행하고 보니 펭귄 클래스여서 정상동작하지 않는다...
대신! 날기는 인터페이스로 정의하고 날 수 있는 새에만 날기 인터페이스를 상속받게 하자.

=> 다형성의 원리 이용!
interface

인터페이스 분리 원칙

Interface Segregation Principle

하나의 인터페이스보다는 여러 개의 구체적인 인터페이스를 사용하는 것이 좋다.

ex) 강아지 클래스를 구현할 때 동물이라는 클래스만 상속받는 것보다는.
짖는 인터페이스, 네 발로 걸어다니는 인터페이스 등 여러개의 인터페이스를 상속받도록 하자.

=> 자유로운 상속!

의존 역전 원칙

Dependency Inversion Principle

의존 관계를 맺을 때는 일반적이고 추상적인 것이 좋다.

ex) 내부 변수로 먹이 타입이 필요하다. 지금은 당근 클래스를 의존하고 있지만, 상추 클래스로 변경하고 싶다...
대신! 두 클래스의 상위 클래스인 채소 클래스를 정의하고 이를 의존하도록 하자.

=> 클래스간의 결합도 감소!


왜 ?

  • 장기적으로 유지보수 가능하고 확장 가능한 코드를 작성하기 위해서.
  • 단순한 이론이 아닌 실제 개발 현장에서 발생하는 복잡성과 변경 요구사항에 유연하게 대응할 수 있게 해주는 실용적인 가이드
profile
UNITY로 게임 개발하는 사람

0개의 댓글