본문 바로가기

 𝗔𝗣𝗣𝗟𝗘/SWIFT : GRAMMAR

Swift 기초 문법 - 객체지향 5원칙(SOLID)

 

 

 

 

객체지향 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()
        }
    }
}

 

 

 

 

 

 

객체 지향(OOP) 보러가기

 

Swift 기초 문법 - 객체 지향(OOP)

객체 지향(OOP) 💡 객체 지향(OOP) '객체지향'은 프로그래밍 패러다임 중 하나이다. 프로그램을 여러 개의 독립된 객체로 나누고, 이러한 객체들 간의 상호작용을 통해 프로그램을 설계하고 구현

wood-fxrest.tistory.com

 

Recent Posts
Visits
Today
Yesterday
Archives
Calendar
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31