목록으로
OOP

객체지향 설계 5원칙

Dev Park
10/12/2022
31 views

객체지향 설계 5원칙이란?

객체지향에서 꼭 지켜야하는 5개의 원칙을 통틀어 객체지향 설계 5원칙이라고한다.

SRP : 단일 책임 원칙

Single Responsibility Principle

하나의 객체는 하나의 책임만을 가져야한다는 원칙.

책임이란?

코드에 변경이 일어났을때 영향을 받는 범위를 뜻한다.

변경사항이 발생했을때 애플리케이션에 주는 영향이 적을 수록 단일 책임 원칙을 잘 따른 것이다.

OCP : 개방-폐쇄 원칙

Open-Closed Principle

객체는 높은 응집도와 낮은 결합도를 가져야한다는 원칙이다.

높은 응집도란?

하나의 객체에 같은 책임과 비슷한 기능만을 모아둔 것을 뜻한다.

낮은 결합도란?

객체끼리의 결합도를 낮게 유지해야한다는 것을 뜻한다.
결합도가 낮으면 변경이 발생하더라도 다른 곳에 미치는 영향이 적어진다.

즉 개방-폐쇄 원칙은 새로운 변경사항이 발생했을때 유연하게 코드를 추가하거나 수정할 수 있어야한다.
하지만 다른 곳에서 객체를 직접적으로 수정하지 못하게 폐쇄해야한다는 원칙도 가지고있다.

왜 직접적으로 객체를 수정하면 안될까?

객체지향언어는 객체를 추상화해야하기 때문이다.

추상화란?

다른 글에서 더 자세하게 다룰 예정이지만 간단하게 설명하자면
'공통된 속성이나 기능을 가진 여러가지 객체들을 하나로 묶어 추상적인 객체로 정의하는 것이다'
예를 들어 승용차, 버스, 트럭과 같은 객체들은 자동차라는 상위에있는 추상적인 객체로 정의되는 것을 생각하면 이해가 편하다.
왜 추상화를 해야하는지에 대해서는 다음글에서 자세하게 설명하겠다.

LSP : 리스코프 치환 원칙

Liskov Substitution Principle

하위 객체는 상위 객체를 대신할 수 있어야한다는 원칙이다.
위의 추상화에서 설명한 것처럼 자동차라는 추상적인 객체의 기능을 하위 객체인 승용차, 버스, 트럭은 모두 가지고 있다.
이처럼 추상적인 상위 객체로부터 상속받은 하위 객체는 상위 객체의 역할을 대체할 수 있어야한다.

ISP : 인터페이스 분리 원칙

Interface Segregation Principle

관련된 기능을 개방-폐쇄 원칙에 따라서 하나의 객체에 모아뒀더라도, 클라이언트(사용자)를 위해 사용하는 기능만을 모아둔 인터페이스들로 분리하는 원칙을 말한다.
격투기라는 객체가 있다면 주먹, 발차기, 그라운드 기술 같이 사용할 기능만을 모아둔 인터페이스를 만드는 것이 인터페이스 분리 원칙이다.

인터페이스란?

메뉴판을 떠올리면 이해하기 쉽다.
메뉴판에는 음식의 이름, 사진 등과 같이 어떤 음식인지를 나타내는 정보만 있을뿐 그 음식의 조리법에 대하여 써져있지 않다.
이 처럼 인터페이스 객체는 다른 객체의 메소드의 몸통(기능)을 구현하지않고, 메소드의 종류에 대해서만 나열해 놓은 것이다.
더 자세한 내용은 다른 게시글에서 다루도록 하겠다.

DIP: 의존성 역전 원칙

Dependency Inversion Principle

상위 객체는 하위 객체에 의존하면 안된다는 원칙.
상위 객체는 추상적인 객체여야하기 때문에 구체적인 객체인 하위 객체로 부터 상속을 받거나 의존하면 안된다.
또한 상위 객체는 변경이 없어야하며, 구체적인 기능은 상위 객체로부터 상속을 받은 하위 객체에 추가하여야한다.

마치며

객체지향 설계 5원칙에 대하여 공부해봤다.
이 다섯가지 원칙에 대해 알게되면 객체지향언어를 사용할 때 생기던 수많은 의문을 해결하는데 도움이 될 것이다.