---
# System prepended metadata

title: '타입 활동 학습 (summerCat, 토털이, Bella) - 세탁기'

---

# 타입 활동 학습 (summerCat, 토털이, Bella) - 세탁기
- 사람의 언어로 표현합니다
(영어, 한글 택일)
- 행위와 특성을
분리하여 표현합니다

## 사무용 복합기

### 추상화
- 행위:
    - 복사
    - 스캔
    - 출력
    - 팩스
- 특성:
    - 출력 색상 (컬러/흑백)
    - 인쇄 방식 (잉크젯/레이저)
    - 단면/양면
    - 제조사
    - 네트워크 방식 (와이파이/블루투스/USB)
    - 용지 유무
    - 출력 부수

### 캡슐화 / 은닉화
- 은닉화: 인쇄 용지 여부, 잉크 여부, 네트워크 연결등을 숨깁니다.
- 캡슐화: 사용자가 선택한 기능(출력, 스캔, ..)에 따라 옵션을 선택하여 실행합니다.


```swift
let fujiPrinter = MFP(manufacturer: "fuji")
fujiPrinter.chooseFunction(function: MFPFunction.print)
fujiPrinter.choosePrintOption(printColor: "mono", 
                        pageSide: "double", 
                        network: "wifi", 
                        numberOfCopies: 10,
                        data: someData)
fujiPrinter.print()



class MFP() {
    let manufacturer: String
    var function: MFPFunction = .print
    var printColor = "mono"
    var printMethod = "laser"
    var pageSide = "single"
    var network = "Bluetooth"
    var numberOfCopies = 1
    var data: Data = nil
    private var inkLeft: Int = 100
    private var paperLeft: Bool = true
    
    enum MFPFunction {
        case print, scan
    }
    
    init(manufacturer: String) {
        self.manufacturer = manufacturer
    }
    
    
    func chooseFunction(function: MFPFunction) {
        self.function = function
    }
    
    func choosePrintOption(printColor: String, 
                        pageSide: String, 
                        network: String, 
                        numberOfCopies: Int,
                        data: data
                       ) {
        self.printColor = printColor
        self.pageSide = pageSide
        self.network = network
        self.numberOfCopies = numberOfCopies
        self.data = data
    }
    
    func chooseScanOption(printColor: String, 
                        pageSide: String, 
                       ) {
        self.printColor = printColor
        self.pageSide = pageSide
    }
    
    private func connectToNetwork() {
        // connect
    }
    
    private func sendDataToUser() {
        
    }
    
    private func checkPaper() {
        
    }
    
    private func checkInk() {
        
    }
    
    func print() {
        connectToNetwork()
        checkPaper()
        checkInk()
        // 출력
    }
    
    func scan() {
        //scan
        sendDataToUser()
    }
}
```