본문 바로가기

야곰커리어캠프_TIL

20200213 / D8 / 일반화,추상화,캡슐화,은닉화

타입 - 개체를 대표하는 표현(명사들의 대명사를 설계하는 것)

일반화 - 연관성 있는 두개 이상의 개체집합을 묶어 상위의 개체집합을 만드는것,

추상화 - 중요한 특징을 추출해서 간단하게 표현할것(타입의 특징들을 추출한다.)

인스턴스 - 설계도를 통해 만들어진 개체를 인스턴스

프로퍼티 - 인스턴스 또는 타입이 공통적으로 갖는 특성

캡슐화 - 객체의 속성과 행위를 하나로 묶고, 실제로 구현 내용 일부를 외부에 감추어 은닉한다.

은닉화 - 데이터와 데이터를 처리하는 행위를 묶고, 외부에는 그 행위를 보여주지 않는 것

 

추상화랑 은닉화랑 비슷해보이는데 추상화하여 관점만 추출된 것을 굳이 보여줄 필요가 없을때 은닉화를한다?

 

 

# 은닉화 팁

사용자와 상호작용할 필요없다고 생각되면 은닉화를 진행하자(단, 사용자에게 기능을 보여줘야한다면 읽기전용을 사용하자)

 

비즈니스를 하는 입장에서 생각해보자. 프로퍼티는 CEO, 메서드가 사원이라고 생각해보고 대표가 처리해야할 일들을 직원들이 처리를 최대한 하려고 한다고 가정을 해보자. 프로퍼티를 건들지 않는선에서 메서드가 기능을 다처리해준다고 생각하고 코드를 구현해보자.

 

세탁기 예시코드)

class LaundryMachine {
    private let company: String
    private let name: String
    private let size: String
    private let capacity: String
    private let color: String
    
    init(company: String, productName: String, size: String, capacity: String, color: String) {
        self.company = company
        self.name = productName
        self.size = size
        self.capacity = capacity
        self.color = color
    }
    
    func checkProductInfomation() {
        print("제조사: \(self.company)\n제품명: \(self.name)\n사이즈: \(self.size)\n용량: \(self.capacity)\n색상: \(self.color)\n")
    }
    
    func turnPower(on: Bool) {
        print("\(on ? "전원이 켜졌습니다." : "전원이 꺼져습니다.")")
    }
    
    func setMode(capacity: String, hotWater: Bool, degree: String) {
        print("용량: \(capacity) 물 온도:\(hotWater) 강도: \(degree)로 모드를 설정합니다.")
    }
    
    func startLaundry() {
        print("세탁을 시작합니다.")
    }
    
    func pauseLaundry() {
        print("세탁이 일시정지 되었습니다.")
    }
    
    func displayCurrentStatus(time: String) {
        print("세탁단계: \(self.capacity) 남은 시간: \(time)")
    }
}

사람 예시코드)

class Person {
    private let name: String
    private let birthYear: Int
    private(set) var bobby: String
    private let hasMale: Bool
    private var moneyAmount: Int
    
    init(name: String, birthYear: Int, bobby: String, hasMale: Bool, moneyAmount: Int) {
        self.name = name
        self.birthYear = birthYear
        self.bobby = bobby
        self.hasMale = hasMale
        self.moneyAmount = moneyAmount
    }
    
    func greetSomeone(who: String) {
        print("Hi I'm \(self.name) Nice To Meet You")
    }
    
    func eat(somthing: String) {
        print("\(somthing) very good taste")
    }
    
    func move(to: String) {
        print(" move to \(to)")
    }
    
    func doLaundry() {
        
    }
    
    func playXcode() {
        
    }
}

 

프로퍼티는 가능하면 외부에서 함부로 접근할 수 없도록 메서드로 기능을 대체하였다. 아직 구현해봐야할 것들과 공부해야할 것들이 많지만 차근차근 익혀나가보자..