SOLID Principles - Single Responsibility
소프트웨어 개발에서 SOLID 원칙 중 하나인 단일 책임 원칙은 하나의 클래스가 목적에 부합하는 단 하나의 책임만을 가져야 한다는 원칙입니다. 이를 통해 클래스의 역할과 책임이 명확히 분리되어 유지보수성과 확장성이 향상됩니다.
예시 1: 함수 분리
다음은 함수 분리의 예시입니다.
func add(first: Int, second: Int) -> Int {
return first + second
}
func numPrint(num: Int) {
print(num)
}
위의 예시에서 첫 번째 함수는 두 수를 더하고 결과를 반환하는 역할을, 두 번째 함수는 숫자를 프린트해주는 역할을 수행합니다.
이 두 함수는 각각 다른 책임을 가지므로 단일 책임 원칙을 준수하고 있습니다.
두 함수를 합쳐서 코드를 줄일 수도 있지만, 이는 단일 책임 원칙을 위배하게 됩니다.
예시 2: 클래스 분리
다음은 클래스 분리의 예시입니다.
옳지 않은 Sonny 예시:
class Sonny {
let team: String
let totalGoals: Int
init(team: String, total: Int) {
self.team = team
self.totalGoals = total
}
func sonKaneDuoTotalGoal() {
let kane: HarryKane = HarryKane(team: "Tottenham Hotspur F.C.", total: 210)
print(self.totalGoals + kane.totalGoals)
}
}
옳지 않은 Sonny 예시에서는 Sonny 클래스 내부에 sonKaneDuoTotalGoal()이라는 메서드가 추가되어 있습니다.
이 메서드는 Sonny 클래스 자체의 책임을 넘어서, Sonny와 Kane의 듀오 토탈 골을 계산하고 출력하는 역할을 수행합니다.
이는 단일 책임 원칙을 위배하는 예시입니다.
옳은 Sonny 예시:
class Sonny {
let team: String
let totalGoals: Int
init(team: String, total: Int) {
self.team = team
self.totalGoals = total
}
func returnMyGoals() -> Int {
return totalGoals
}
}
let sonny = Sonny(team: "Tottenham Hotspur F.C.", total: 100)
let kane = HarryKane(team: "Tottenham Hotspur F.C.", total: 210)
print(sonny.totalGoals + kane.totalGoals)
옳은 Sonny 예시에서는 Sonny 클래스가 자신의 팀과 총 득점 수를 나타내는 역할을 수행하도록 수정되었습니다.
클래스 내부에는 자신의 골 수를 반환하는 returnMyGoals() 메서드만 존재합니다. 이렇게 함으로써 Sonny 클래스는 단일 책임 원칙을 준수하게 됩니다.
위의 코드는 외부에서 Sonny 인스턴스와 Kane 인스턴스를 생성하고, 두 선수의 총 득점 수를 더한 값을 출력하는 방식입니다.
이렇게 함으로써 Sonny 클래스는 자신의 역할에 집중하고, 듀오 토탈 골을 계산하거나 출력하는 책임은 외부에서 처리될 수 있습니다.
'Design Pattern' 카테고리의 다른 글
SOLID Principles Series 5 : Dependency Inversion (의존성 역전 원칙) (0) | 2023.06.09 |
---|---|
SOLID Principles Series 2 : Open-Closed (개방 폐쇄 원칙) (0) | 2023.06.09 |
SOLID Principles Series 4 : Interface Segregation (인터페이스 분리 원칙) (0) | 2023.06.09 |
SOLID Principles Series 3 : Liskov Substitution(리스코프 치환) (0) | 2023.06.09 |
[Swift] 싱글톤 패턴(Singleton Pattern)과 private init (0) | 2023.03.14 |