728x90
    
    
  반응형
    
    
    
  SMALL
    객체지향의 역할, 책임 차이 쉬운 예
게임의 경우
역할: 플레이어, 적, 맵 등 자신이 맡은 것
책임: 맡은 역할을 잘 수행할 기능
코드 예제
// 역할: Player, 책임: 이동, 점프, 공격
protocol Player {
    var name: String { get }
    func move(to position: CGPoint)
    func jump()
    func attack()
}
// 역할: Enemy, 책임: 이동, 점프, 공격
protocol Enemy {
    var name: String { get }
    func move(to position: CGPoint)
    func jump()
    func attack()
}
// 역할: GameMap, 책임: 맵 생성, 맵 이동
protocol GameMap {
    var name: String { get }
    func createMap()
    func moveMap(to position: CGPoint)
}
// Player 역할의 구현
class Knight: Player {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func move(to position: CGPoint) {
        print("\(name) moves to \(position)")
    }
    
    func jump() {
        print("\(name) jumps")
    }
    
    func attack() {
        print("\(name) attacks")
    }
}
// Enemy 역할의 구현
class Dragon: Enemy {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func move(to position: CGPoint) {
        print("\(name) moves to \(position)")
    }
    
    func jump() {
        print("\(name) jumps")
    }
    
    func attack() {
        print("\(name) attacks")
    }
}
// GameMap 역할의 구현
class CastleMap: GameMap {
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    func createMap() {
        print("\(name) map created")
    }
    
    func moveMap(to position: CGPoint) {
        print("\(name) map moves to \(position)")
    }
}
// 이제 각각의 역할에 따라 객체를 생성하고 역할에 맞는 책임을 수행할 수 있습니다.
let player = Knight(name: "Arthur")
let enemy = Dragon(name: "Smaug")
let map = CastleMap(name: "Camelot")
player.move(to: CGPoint(x: 10, y: 20))
enemy.jump()
map.createMap()728x90
    
    
  반응형
    
    
    
  LIST
    'iOS' 카테고리의 다른 글
| One-Time-Pad (0) | 2023.05.04 | 
|---|---|
| Swift XML 파싱 (0) | 2023.05.03 | 
| 솔리드(SOLID) 원칙 (0) | 2023.05.03 | 
| iOS UDP 통신 쉬운 예제 코드 (0) | 2023.04.30 | 
| TCP, UDP (0) | 2023.04.29 | 
 
									
								 
									
								