인공지능 시대의 소프트웨어 공학
몇 달 전에(3월) OCP에 대한 글을 쓰고 난 후에 <Mastering OOP Fundamentals with SOLID Principles>를 보게 되었습니다. 그때 직관적으로 캡슐화에 대한 생각을 이렇게 끄집어낸 일이 있죠.
캡슐화의 핵심은 단위를 만들거나 경계를 짓는 것
우선 그런 영감을 준 도식은 다음과 같습니다.
제 주장에 기초해서 그림을 해설해 봅니다. 변수와 메소드를 하나의 단위unit로 만들어 경계를 만든 것이 캡슐화의 핵심입니다. 기존의 책과 설명들은 종전의 절차적 프로그래밍과 비교하느라 자료 구조와 함수가 합쳐진 것에 초점을 맞춥니다. 하지만, 프로그램의 복잡도가 달라진 지금은 별다른 효용이 없는 설명인 경우가 많습니다. 그 대신에 단위나 경계가 핵심이란 점을 기억하시면 좋겠다는 생각에서 나온 주장이라 할 수 있습니다.
최근에 <프로그래밍 개체의 식별과 레코드의 식별>을 쓰면서 자바 언어(혹은 여타 객체 지향 언어)가 제공하는 캡슐화가 등장했습니다. 그래서, 캡슐화에 대해 한 번 더 생각해 보는 글입니다. 박문호 박사님께 다 년 간 귀동냥으로 들은 덕분에 ‘캡슐화’라고 하면 원자 모형을 떠올리지 않을 수 없게 되었습니다. 그 덕분에 작년에도 <WHY> 책을 읽다가 미디어의 3 요소를 보자마자 원자 모형을 대입했던 기록이 있습니다.
그 글을 찾아가 읽어 보니 원자 모형을 인용하며 <입자와 파동의 이중성을 소프트웨어 설계에 응용하기>를 언급했습니다. 그 글은 2년 전에 쓴 글인데, 다음과 같은 문제 제기를 합니다.
입자와 파동의 이중성을 설계에도 적용할 수 있지 않을까?
마치 핵을 구성하는 입자들과 그 주위를 운동하는 전자를 묶어 원자를 만든 것과 변수를 묶어 다양한 상태를 표현할 수 있는 구조체와 행위를 표현하는 메소드(혹은 함수)를 묶어 객체를 만든 것에 공통점이 있다는 생각이 듭니다.
생각이 여기에 미치자 이번에는 capsule이라는 낱말의 뜻을 따져 보고 싶어 져 콜린스 사전을 찾습니다.
A capsule is a very small tube containing powdered or liquid medicine, which you swallow.
제가 아는 약 넣는 튜브가 첫 번째 뜻이군요.
A capsule is a small container with a drug or other substance inside it, which is used for medical or scientific purposes.
여기서 파생해서 다양한 '작은' 용기(container)에 응용하여 쓰게 되는 것이 아닌가 유추하게 됩니다.
캡슐화(Encapsulation)를 찾아보면 약에서 출발해서 주로 전자 기기와 컴퓨팅 분야로 말이 퍼져 나간 흔적을 볼 수 있습니다.
그리고, 위키피디아 페이지를 보면 OOP는 (마치 원자처럼) 객체 단위의 캡슐을 필수로 규정하지만, 캡슐화가 OOP의 전유물은 아니라고 설명합니다.
모든 객체 지향 프로그래밍 (OOP) 시스템은 캡슐화를 지원합니다. 하지만 캡슐화는 OOP만의 고유한 기능은 아닙니다. 추상 데이터 유형, 모듈 및 라이브러리 구현도 캡슐화를 제공합니다. 프로그래밍 언어 이론가들은 이러한 유사성을 존재 유형 측면에서 설명했습니다.
다른 예로 추상 데이터 타입(ADT), 모듈 그리고 라이브러리 역시 일종의 캡슐로 볼 수 있다고 설명합니다.[1]
이렇게 낱말의 뜻을 따라가며 따져 보면 결국 캡슐에 담긴 요소들이 동질성을 띄어야 모형이 효과를 발휘할 것이란 생각이 듭니다.
여기서 제가 암묵적으로 가정한 효과의 기준이 존재함을 알 수 있습니다. 앞서 계속해서 언급했던 개체의 식별 기준이 되는 어떤 규칙이라고 할 수 있습니다. 이렇게 생각을 풀어 보니 '원자 모형'과 같은 물질의 구성을 설명하는 완전한 규칙을 왜 쫓으려고 하는지 이유를 짐작할 수 있습니다.
[1] 더불어 위키피디아는 타입 시스템의 Existential types를 이들을 아우르는 이론으로 설명하지만, 주제를 벗어나 이를 다루지 않습니다.
(8회 이후 링크만 표시합니다.)
9. 컨텍스트 엔지니어링 분류 체계와 구현 기술의 진화 양상
10. 목적에 따라 소프트웨어 설계 활동의 양상이 달라진다
16. 의사결정 부담을 줄여주는 패턴과 if로 시작하는 조건문