본문 바로가기

iOS

객체지향의 역할, 책임 차이 쉬운 예

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