객체와 자료구조

처음에는 스택, 힙, 리스트 같은 그런 자료구조를 말하는줄 알았지만, 클린 코드에서 말하는 자료구조는 다른 개념입니다. 

자료구조

자료구조는 가지고 있는 변수를 그대로 노출시킵니다. 이를테면

struct Animal {
    var kind: String
    var age: Int
}

이런 구조가 자료구조가 될 수 있겠네요.

또 이런경우도 자료구조라 할 수 있습니다.

class Animal {
    private var kind: String
    private var age: Int
    
    init(kind: String, age: Int) {
        self.kind = kind
        self.age = age
    }
    
    func getKind()->String{
        return kind
    }
    
    func getAge()->Int{
        return age
    }
}

kind, age가 private로 숨겨져 있지만, 외부에서 getters 혹은 setters로 내부 구조에 접근 할 수 있습니다. 이렇게  자료구조는 내부 구조를 외부에서 접근하거나 알수 있는것을 의미합니다.

 

객체

클린 코드에서의 객체란 내부 구조를 숨긴채, 동작을 공개하는것을 의미합니다. swift에서는 protocol로 이를 구현 할 수 있습니다.

protocol Barkable {
    func bark()
}

class Cat: Barkable {
    
    let catBarkSound = "야옹"
    
    func bark() {
        print(catBarkSound)
    }
}

class Dog: Barkable {
    
    let dogBarkSound = "멍멍"
    
    func bark() {
        print(dogBarkSound)
    }
}

class AnimalBarkSpeaker {
    var animal: Barkable
    
    init(animal : Barkable) {
        self.animal = animal
    }
    
    func play(){
        animal.bark()
    }
}

이런식으로 내부 자료를 숨긴채로 추상화된 동작만을 제공하는것을 객체라고 합니다.

'클린 코드' 카테고리의 다른 글

한가지 작업이란?  (0) 2022.09.01
의미있는 이름 정하기  (0) 2022.08.30