객체지향 5원칙
💡 객체지향(SOLID) 원칙
객체지향 프로그래밍에서 중요한 원칙으로 알려진 "SOLID" 원칙은 다음과 같습니다.
- 단일 책임 원칙 (Single Responsibility Principle, SRP)
하나의 클래스는 단 하나의 동작만을 가져야 한다.
→ 즉, 클래스를 변경해야 하는 이유는 단 하나여야 함 - 개방-폐쇄 원칙 (Open-Closed Principle, OCP)
확장에 대해서는 열려 있어야 하고 변경에 대해서는 닫혀 있어야 한다.
→ 즉, 기존의 코드를 변경하지 않고도 기능을 추가할 수 있어야 함 - 리스코프 치환 원칙 (Liskov Substitution Principle, LSP)
파생 클래스는 기반 클래스로 대체 가능해야 한다.
→ 즉, 자식 클래스는 부모 클래스에서 정의된 메서드를 오버라이드하여 기대되는 동작을 변경하지 않아야 함 - 인터페이스 분리 원칙 (Interface Segregation Principle, ISP)
클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안 된다.
→ 즉, 여러 개의 인터페이스가 단일 범용 인터페이스보다 나음 - 의존성 역전 원칙 (Dependency Inversion Principle, DIP)
추상화에 의존해야 하며, 구체화에는 의존하면 안 된다.
→ 즉, 상위 수준 모듈이 하위 수준 모듈에 의존하면 안 되며, 둘 모두 추상화에 의존해야 함
단일 책임 원칙
- 하나의 클래스는 단 하나의 동작만을 가져야 한다는 원칙
단일 책임 원칙을 준수하지 않은 경우
class FileManager {
func saveDataToFile(data: String) {
// 파일에 데이터를 저장하는 기능
}
func sendDataToServer(data: String) {
// 서버로 데이터를 전송하는 기능
}
func processData(data: String) {
// 데이터를 가공하는 기능
}
}
단일 책임 원칙을 준수하는 경우
class FileManager {
func saveDataToFile(data: String) {
// 파일에 데이터를 저장하는 기능
}
}
class ServerManager {
func sendDataToServer(data: String) {
// 서버로 데이터를 전송하는 기능
}
}
class DataProcessor {
func processData(data: String) {
// 데이터를 가공하는 기능
}
}
의존성 역전 원칙
- 추상화에 의존해야 하며, 구체화에는 의존하면 안 된다는 원칙
의존성 역전 원칙을 준수하지 않은 경우
class LightBulb {
func turnOn() {
// 전구를 켜는 동작
}
}
class LightSwitch {
let lightBulb = LightBulb() // 저수준 모듈에 직접 의존
func toggle() {
// 스위치를 눌렀을 때 전구의 상태를 변경
// LightBulb 클래스에 직접 의존하여 결합도가 높음
if lightBulb.isOn {
lightBulb.turnOff()
} else {
lightBulb.turnOn()
}
}
}
의존성 역전 원칙을 준수하는 경우
protocol Switchable {
func turnOn()
func turnOff()
}
class LightBulb: Switchable {
func turnOn() {
// 전구를 켜는 동작
}
func turnOff() {
// 전구를 끄는 동작
}
}
class LightSwitch {
let device: Switchable // 고수준 모듈이 저수준 모듈에 직접 의존하지 않고 인터페이스에 의존
init(device: Switchable) {
self.device = device
}
func toggle() {
// 스위치를 눌렀을 때 전구의 상태를 변경
// Switchable 프로토콜에 의존하여 결합도가 낮아짐
if device.isOn {
device.turnOff()
} else {
device.turnOn()
}
}
}
' 𝗔𝗣𝗣𝗟𝗘 > SWIFT : GRAMMAR' 카테고리의 다른 글
Swift 기초 문법 - 데이터 타입 (0) | 2024.03.07 |
---|---|
Swift 기초 문법 - replacingOccurrences(of: with: ) (0) | 2024.03.07 |
Swift 기초 문법 - 추상 클래스 (0) | 2024.03.06 |
Swift 기초 문법 - 함수 기본 형태 (0) | 2024.03.06 |
Swift 기초 문법 - 프로퍼티(Property) (0) | 2024.03.06 |