본문 바로가기

공학/소프트웨어

객체지향기법과 자판기

반응형

© nicsandman20, 출처 Unsplash

오늘은 붕어빵 기계에 이어 자판기로 객체기향기법에 대해 설명해보고자 한다. 지난번에는 현실 세계의 붕어빵 틀(개체)를 추상화하여 만든 객체로 효율적이게 붕어빵 기계를 만드는 예시를 통해 '상속, 다형성, 추상화'에 대한 개념을 알아보았다. 이번에는 자판기를 이용해서 객체지향 기법의 다른 원칙인 '캡슐화''정보 은닉'에 대해서 설명해보고자 한다.

일단 자판기를 어떻게 추상화해볼 수 있을지 생각해보자. 먼저 현실세계의 개체를 추상화하여 객체로 만들 때, 이러한 객체를 만드는 틀을 클래스라고 한다. 클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다. 객체는 클래스에 정의된 대로 생성된다. 클래스는 현실세계의 자판기를 본따서 만든 설계도이고, 그 설계도로 제작된 자판기가 객체인 것이다.

이렇게 자판기를 클래스로 만든다면, '돈넣기, 음료수 선택, 음료수 배출'의 기능을 가진 클래스를 설계하고, 그 안에 '음료수 번호, 음료수'를 담을 수 있는 클래스를 또 설계해 자판기마다 자유롭게 담을 수 있는 음료수 갯수를 선택하게 만들 것이다. 용어가 익숙하지 않아서 한번에 이해하기 힘들수도 있지만, 객체지향의 효율성을 얻기 위해서는 이러한 용어에 익숙해져야한다!

 

 


 

 

1.캡슐화

우리는 음료수를 주문할 때, 자판기의 내부 동작을 몰라도 된다. 그저 돈을 넣고 가격에 해당하는 음료수를 선택하면 된다. 자판기 안에 회로가 어떻게 구성되어있는지, 물리적인 설계가 어떻게 되어있는지 우리가 알 필요가 없다. 이 모든 기능들이 하나의 캡슐로 묶여있어 사용자는 그저 버튼만 누르면 모든 기능들이 동작되기 때문이다.

사용자가 편하게 시스템을 이용하려면 사용자가 컨트롤하는 요소가 최대한 적어야 한다. 사용자가 감당해야할 리스크를 최대한 줄여줘야 한다. 만약 음료수 자판기가 버튼만 누르면 음료수가 나오는 것이 아닌, 버튼 삼십개는 눌러야 음료수가 나오는 구조로 되어있다면 그게 싫은 대부분의 사람들이 음료수 자판기를 이용하지 않을 것이다. 이렇게 되면 사용자의 이용 빈도가 줄어드는 것은 물론, 복잡한 인터페이스로 인해 사용자가 실수할 확률도 올라가서 시스템의 안정성도 크게 흔들리게 된다. 자판기의 전원버튼을 음료수를 뽑는 버튼인지 알고 눌러버리면 자판기 안의 모든 음료수들이 손상될수도 있다.

이렇게 사용자의 편의성을 올리고, 사용자와 개발자들이 실수할 확률을 줄이기 위해 기능들을 캡슐로 감싸고 꼭 필요한 최소한의 기능들만을 꺼내놓은것을 캡슐화라고 한다. 이렇게 캡슐화를 고려하며 시스템을 설계하면 사용자 편의성이 올라가고, 사용자와 개발자가 실수할 확률은 줄어들고, 개발자가 캡슐화된 기능을 재사용해 효율적인 시스템 개발을 가능할 수 있게 된다.

2.정보은닉

소프트웨어의 유연성을 확보하는 방법은 무엇일까? 그것은 바로 클래스간에 상호작용을 최소한으로 줄이는 것이다. 어떤 클래스가 무슨 일을 해도 다른 클래스들이 아무런 변화를 느끼지 못한다면, 그 클래스를 유연하게 변경하여도 다른 클래스에서 어떠한 문제도 생기지 않을 것이다. 하지만 클래스들 간에 어떠한 연결도 없다면, 그것은 한 시스템에 존재하는 클래스들이 아닌 각각의 클래스가 별도의 시스템이나 다름 없다.

이렇게 클래스들은 필연적으로 서로 연관될 수 밖에 없기 때문에, 최대한 효율적인 시스템 개발을 위해서는 꼭 필요한 상호작용만 남겨두고 나머지 기능들은 최대한 숨기는 정보은닉이 필요하다. 이러한 정보은닉의 예로 위에서 설명한 캡슐화가 있다. 하지만 캡슐화가 되었다고 꼭 정보은닉이 된것은 아니다. 필요한 기능들을 한개의 캡슐로 묵었지만, 필요하지도 않은 기능들을 밖에 꺼내놓을수도 있다.

일반 자판기 이용자에겐 돈을 넣고 음료수를 뽑는 기능만 필요하지만, 자판기라는 클래스 안에 모든 사용자가 접근가능한 권한으로 음료수 넣기, 전원 내리기와 같은 기능을 넣어버린다면 그 자판기는 혼돈에 빠지게 될 것이다. 이렇게 정보은닉을 베이스로 캡슐화를 제대로 한다면 개발자, 사용자가 모두 만족하고 안정적인 시스템을 만들 수 있을것이다.

반응형

'공학 > 소프트웨어' 카테고리의 다른 글

테스트의 원리 -1  (0) 2020.09.30
협업 도구 정리  (0) 2020.09.25
객체지향기법과 붕어빵  (0) 2020.09.25
아키텍처 패턴을 배우는 이유  (0) 2020.09.25
완벽한 계획은 없다.(복잡계 프로젝트)  (0) 2020.08.02