ComputerProgrammingwithGNUSmalltalk:5.1

From 흡혈양파의 번역工房
Revision as of 08:48, 16 October 2012 by Onionmixer (talk | contribs) (CPGS 캡슐화 페이지 추가)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

캡슐화

여러분 핸드폰의 전자회로가 어떻게 작동하는지 궁금하진 않았나요? 그걸 알아야 하지는 않나요? 아마도 그런 경우는 거의 없을 것입니다. 핸드폰을 사용하기 위해서 어떻게 만들었는지, 모두 알아야 할 필요는 없습니다. 그냥 메뉴얼을 읽는 것만으로도 충분히 사용할 수 있습니다. 따라서, 우리는 모든 자세한 내용, 과학 법칙, 사용할 물체의 모든 속성을 알 수도 없지만, 알 필요도 없습니다. 객체 지향 프로그래밍은 -- 위와 같은 실제 생활의 방식을 응용프로그램에 접목한-- 캡슐화encapsulation 라는 것을 합니다.


스몰토크에서는 객체의 내부 상태를 직접 바꾸도록 허용하지 않습니다. 객체는 오로지 객체끼리 메시지를 전달하며 소통할 뿐입니다. 따라서, 스몰토크는 불필요한 정보를 캡슐화합니다.


게다가 캡슐화는, 여러분에게 실세계 상태에서 사고하는 것을 허용하며, 몇몇 종류의 정보 은닉information hiding을 통해, 여러분이 작성할 프로그램을 더욱 견고하게 하고 재사용 가능하도록 도움을 줍니다. 이 말은 여러분이 객체 내부 구현 내용을 숨기고, 다른 사람들에게 객체와 소통하기 위한 프로토콜protocol 만을 제공하여서, 차후에 구현 내용이 바뀌더라도, 객체를 사용하는 프로그래머들이 기존 프로토콜 만으로 영향을 받지 않고, 계속 사용할 수 있다는 것을 의미합니다.


예를 들어, 여러분이 이차방정식의 제곱근을 구하는 Calculator 클래스를 생성했습니다. 방정식의 정보를 보내주기만 하고, 제곱근 값을 반환받습니다. 이 클래스는 어쩌면 제곱근을 구하는데 몇 시간이 걸리는 비효율적인 알고리즘을 사용할 수도 있습니다. 그래도 없는 것보다는 나으니까, 여러분은 친구들에게 코드를 배포하였습니다. (그들을 클라이언트라고 부를 수 있겠습니다.) 아마도, 배포 한 후에, 여러분이 혁신적인 접근을 발견하여, 계산시간을 몇 초 단위로 줄이게 되었습니다. 알고리즘이 변하였지만, 프로토콜은 변할 필요가 없습니다. 왜냐하면, 클라이언트들은 계산기에 똑같은 정보를 전달하고, 클래스가 방정식의 해를 구해주기만을 원하기 때문입니다. 어떻게 방정식을 풀었는가는 그들의 관심사 밖입니다. 따라서 여러분은 캡슐화의 이점을 얻을 수 있고, 여러분의 새로운 코드를 클라이언트들에게 배포합니다. 클라이언트는 Calculator 클래스를 교체하기만 하면 되고, 그들의 프로그램을 변경할 필요는 없습니다.

Notes