개발 공부/아키텍처
SOLID 원칙을 알아보자 1 : 단일 책임 원칙 - kotlin
yong_DD
2023. 7. 29. 19:06
SOLID 원칙이란?
Single Responsibility Principle |
→ |
단일 책임 원칙 |
Open-Closed Principle |
→ |
개방-폐쇄 원칙 |
Liskov Substitution Principle |
→ |
리스코프 치환 원칙 |
Interface Segregation Principle |
→ |
인터페이스 분리 원칙 |
Dependency Inversion Principle |
→ |
의존성 역전 원칙 |
Single Responsibility Principle
단일 책임 원칙
어떤 클래스나 모듈은 변경하는 이유가 한 가지여야만 한다 - Robert C. Martin
클래스나 모듈이 하나의 책임만을 가지고 있어야 한다는 것이다.
클래스나 모듈이 여러가지 작업을 한다면, 강하게 결합되어 있는 클래스나 모듈이 많이질 것이고 하나를 수정하게 된다면 여러 클래스나 모듈을 수정하게 될 것이다.
[예제 코드]
class Me {
fun currentJob():String = "개발 일을 하고 있다"
fun companyName():String = "00회사에서 일하고 있다"
fun playGame():String = "■ ■ 게임을 하고 있다"
fun playedGame():String = "00 게임을 했다"
}
Me라는 class가 있고 나를 나타내기 위한 여러 기능을 넣어 이렇게 작성할 수 있다.
하지만 나라는 것을 나타내기 위해 많은 기능이 한 class에 들어가 있으며, 다른 곳에 나를 소개해야하는데 ■ ■ 게임이 아니라 "○○ 게임을 하고 있다" 고 하고 싶다면? 문제가 생길 수 있다.
↓
[수정 코드]
interface Job {
fun currentJob(job: String):String {
return "$job 일을 하고 있다"
}
fun companyName(company:String):String {
return "${company}에서 일하고 있다"
}
}
interface Hobby{
fun playingGame(gameName:String):String{
return "$gameName 게임을 하고 있다"
}
fun playedGame(gameName: String):String{
return "$gameName 게임을 했다"
}
fun doExercise(exercise:String) :String{
return "$exercise 운동을 한다"
}
}
class Introduce:Job,Hobby {
fun me1() {
currentJob("개발")
companyName("00회사")
playingGame("젤다")
playingGame("00")
}
fun me2() {
currentJob("개발")
companyName("00회사")
playingGame("○ ○")
playingGame("00")
}
}
class GetHobby:Hobby {
fun person1Hobby() {
doExercise("달리기")
}
}
Job이 하는 일과 Hobby가 하는 일을 나눠 변경되도 상관이 없도록 수정하고 내 소개를 때에 따라 변경하여 보여줄 수 있게 되었다.
(또한 Job과 Hobby가 나뉘며 다른 사람의 Hobby를 가져올 때도 편하게 사용할 수 있도록 되었다.)
각각의 역할과 책임이 나뉜 것이다.
설계할 때 이러한 부분을 잘 고려해서 작업을 해야한다.