일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- POP
- 의도
- 디자인패턴
- iOS프로그래밍
- 인터페이스
- Solid
- 개발자
- 개발
- 부스트코스
- Swfit
- 네이밍
- protocol
- 문법
- 객체지향프로그래밍
- DesignPattern
- 클린코드
- 의존성
- IOS
- interface
- OOP
- 고차함수
- SWIFT
- 아이폰프로그래밍
- CleanCode
- 클린소프트웨어
- 함수형프로그래밍
- fp
- 함수형패러다임
- 이름
- 협업
- Today
- Total
밤에 쓴 코드
OOP ) Class,객체간의 소통 본문
왜 ?
개발자는 소프트웨어에 세상을 표현한다.
게임으로 이해해도 좋을 것같다.
세상은 메모리공간이고
그 곳에 여러 생물/무생물 : 객체
들 을 만들어 내는 것은 개발자의 몫이다.
앞으로의 메모리 공간에는
수많은 종류의 객체들이 존재할 것이다 .
재사용성을 위해 클래스
로 공통적인 속성과 동작을 정의해두고 ,
각각의 객체들은 공통적인 속성과 동작은 가지고있으나 , 각기 내는 결과와 반환 값은 다를수있다
ex)
속성 - 무기는 모두 공격력을 가지고는 있으나 , 같은 공격력을 가지고 있지는 않다.
동작 - 동물은 모두 이동하나 , 고양이는 4족보행 , 사람은 직립보행을 한다.
클래스
의 구조
class 무기{
var 무기명:String
var 공격력 :UInt
init(무기명:String , 공격력:UInt){
self.무기명 = 무기명
self.공격력 = 공격력
}
// 동작 - 메소드( 타입에 선언되어있는 함수)
func 피해를준다( 공격대상 : 플레이어 ){
공격대상.피해를입다(데미지: self.공격력)
}
}
메모리로 구성된 세상에 무기
를 만들고 싶다면 , 무기
라는 추상적인 개념들이 가진 공통적인 속성, 동작 을 뽑아내어 class
로 표현하고
그걸 class
내에서 각각 프로퍼티 ( 변수) 와 메소드 로 표현한다.
class 플레이어{
// 속성,상태 - 프로퍼티(변수)
var 이름: String?
var 체력 : UInt = 100
var 장착무기 : 무기?
init(플레이어이름:String){
self.이름 = 플레이어이름
}
// 동작 - 메소드( 타입에 선언되어있는 함수)
func 공격한다( 적 : 플레이어 ){
print("\(self.이름!)가 \(적.이름!)에게 \(self.장착무기!.공격력)만큼 피해를 입힙니다.")
self.장착무기?.피해를준다( 공격대상: 적)
}
func 이동한다 (){
}
func 피해를입다(데미지:UInt){
self.체력 -= 데미지
}
}
무기
를 사용할 플레이어
또한 class
로 만들어 둔다.
var 플레이어1 = 플레이어(플레이어이름: "부엉이_전사")
플레이어1.장착무기 = 무기(무기명: "부엉이검", 공격력: 10)
var 플레이어2 = 플레이어(플레이어이름: "올빼미_궁수")
플레이어2.장착무기 = 무기(무기명: "올빼미활", 공격력: 5)
메모리로 구성된 세상에서 이용할 객체를 만든다.플레이어
라는 class
로 만들어진
'부엉이_전사' ,'올빼미_궁수'은 둘다 이름과 , 장착무기는 가지고있으나 각각의 무기와 이름은 상이하다.무기
라는 클래스로 구성된 class
'부엉이의검','올빼미의활' 또한 동일하다.
객체간의 메세지전달 - 소통
플레이어1.공격한다(적: 플레이어2) //부엉이_전사가 올뺴미_궁수에게 10만큼 피해를 입힙니다.
플레이어2.공격한다(적: 플레이어1) //올뺴미_궁수가 부엉이_전사에게 5만큼 피해를 입힙니다.
현실또한 그렇듯 객체들간의 소통을 통해 메모리 세상은 돌아간다.플레이어1
이라는 객체가 공격한다
라는 동작을 플레이어2
를 대상으로 행하게 되고 , 그에 따른 플레이어2
는 플레이어1
의 장착무기의 공격력만큼의 피해를 입는다.
이처럼 플레이어1
은 자신이 가진 장착무기
객체에게 메시지를 보내고장착무기
는 다시 플레이어2
에게 메시지를 전달한다.
이런 구조로 객체는 소통하게 된다.
'OOP' 카테고리의 다른 글
OOP ) SOLID - 객체지향 5원칙 (0) | 2019.05.18 |
---|---|
OOP ) 타입, 추상화 (0) | 2019.04.28 |
OOP ) 상태 , 행동 , 식별자 (0) | 2019.04.26 |
OOP) 역할 , 책임 , 협력 (0) | 2019.04.22 |
OOP ) 클래스 / 인스턴스 / 객체 (0) | 2019.04.02 |