제이슨의 개발이야기

SOLID 원칙이란? 재대로 공부하자 본문

컴퓨터과학

SOLID 원칙이란? 재대로 공부하자

제이쓰은 2022. 11. 11. 23:27
728x90
반응형

안녕하세요!

 

개발자에게 있어서 또 객체지향 프로그래밍에 있어서 필수 지식

 

SOLID 원칙 에 대해서 공부하려고 합니다!

 

 

1. 단일 책임 원칙 (Single Responsibility)

 

단일 책임 원칙은 하나의 class 는 하나의 책임(기능)만을 가져야 하는 원칙 입니다.

그리고 이러한 원칙을 지키는 class를 변경하게 되는 이유는 하나여야합니다.

 

예를 들어 로봇 class 가 있다면 

 

요리사 로봇 , 개발자 로봇 , 목수 로봇 등 많은 종류의 로봇이 존재합니다 

 

이때  각각의 로봇의 기능을 하나의 로봇 class에 구현하게 되면 아래의 이미지 처럼 됩니다

 

위의 이미지는 명백히 단일 책임 원칙을 위반하는 방식 입니다 

하나의 클래스에 여러개의 책임(기능)이 존재하기 때문입니다

 

이 원칙을 지키기 위해서는 각 기능 별 class를 따로 만들어야 합니다

 

 

 

2. 개방 폐쇄 원칙 (Open-Closed)

 

개방 폐쇄 원칙은 기능을 추가할 때는 반드시 기존의 코드를 변경하지 않고도 추가 할 수 있어야 함을 의미합니다

 

코드로 설명하면 쉽게 이해 할 수 있습니다 

 

animal 클래스가 있다고 가정 했을때 

 

소,돼지,강아지,고양이 등의 울음소리를 출력하는 메소드가 있을 때 

 

각 동물의 울음 소리 메소드를 animal 클래스가 아니라 

animal 은 인터페이스로 만들고 

각 동물을 class로 만들고 animal 인터페이스를 구현하게 되면 개방 폐쇄 원칙을 지킬 수 있는 방식입니다

class Dog() : Animal{

@Override
	fun bark(){
    
    println("멍멍")
    }
    
    }
    
    
    
    interface Animal{
    
    fun bark() 
    }

 

3. 리스코프 치환 원칙 (Liskov Substitution)

 

스코프 치환 원칙은 하위타입 객체는 상위타입 객체에서 가능한 행위를 수행할 수 있어야 합니다 

 

즉 var a = 부모클래스() 일때 

a= 자식클래스() 로 치환하더라도 부모타입 객체에서 가능한 행위를 수행해야 합니다! 

 

4. 인터페이스 분리 원칙 (Interface Segregation) 

 

인터페이스 분리 원칙은 자신이 사용할 메소드만 의존해야하는 원칙입니다

좀 더 쉽게 이야기 하자면

동물 인터페이스가 있고 이 인터페이스에는 걷기 메소드와 짖기 메소드가 정의 되어 있을 때

강아지 클래스는 걷기 와 짖기 메소드 모두 사용하기 때문에 동물 인터페이스를 구현해도 상관없지만 

 

 

고양이 클래스는 짖기 메소드가 필요 없는 경우 동물 인터페이스 가 아닌 다른 적합한 인터페이스를 구현해야합니다

 

 

5. 의존 역전 원칙 (Dependency Inversion) 

 

의존 관계를 맺을 때, 변하기 쉬운 것 (구체적인 것) 보다는 변하기 어려운 것 (추상적인 것)에 의존해야 함을 의미 합니다 

 

설명이 어려 울거 같은대 쉽게 이야기 하자면

 

구체화된 클래스에 의존하기 보다는 추상 클래스나 인터페이스에 의존해야 함을 의미합니다d

 

아래에 생성자로 LuxurySeat 객체의 의존을 주입받을 때 생성자 파라미터로 LuxurySeat 가 아닌 Seat로 받아서

Seat 인터페이스가 구현된 클래스 모두 사용 가능 하게 끔 구현 하는 것을 의존 역전 원칙을 지킨 case 입니다

class Car(var seat : Seat){



}


class LuxurySeat() : Seat{



}

 

 

728x90
반응형