swift 캡슐화, 은닉화

이번에 진행하고 있는 프로젝트에 본격적으로 클린 아키텍쳐, 객체지향 프로그래밍, solid 원칙 등등을 적용해 보기로 결정해서 공부해 보기로 했습니다. 우선은 객체지향 프로그래밍의 특성인 캡슐화와 은닉화에 대해서 알아보도록 하겠습니다.

 

은닉화

외부에서 내부의 변수나 연산등을 접근하지 못하도록 하는 것을 의미합니다. private를 붙이는것을 은닉화라고 할 수 있습니다. 또 함수 getter, setter를 이용해서 private로 선언된 변수를 접근 제어 하는것 역시 은닉화입니다.

캡슐화

실제로 구현되는 부분은 외부에 드러나지 않고, 사용하는 방법만 알려주고,  특정한 목적을 위해 필요한 변수나 로직을 하나로 묶어서 외부에서 사용 할 수 있게 해주는것을 캡슐화라고 합니다. 다만 아무거나 묶으면 안되고 목적에 맞게 묶어줘야 합니다.

 

class WonExchangeDollar {
    private let exchangeRate: Double = 0.1
    
    func changeWonDollar(won: Int) -> Double {
        
        return Double(won) * exchangeRate
    }
}

원을 달러로 변경을 해주는 class를 만들어준다고 해봅시다. 원을 달러로 변경해 주려면 환율을 알고 있어야 합니다. WonExchangeDollar는 환율을 가지고 있지만 private로 은닉 되어있습니다. 하지만 changeWonDollar 함수를 이용하여 외부에서는 원을 달러로 바꿔줄 수 있습니다. 이런식으로 내부의 정보 접근에는 제한적이지만, 제공되는 메소드를 통해서 특정 목적을 달성 할 수 있게 해주는것을 캡슐화라고 합니다.