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 |