191. 소프트웨어 설계 원칙 - 추상화, 캡슐화, 모듈화, 정보 은닉
핵심 인사이트: 복잡한 소프트웨어를 사람이 다루려면 '단순하게 만들고(추상화)', '부품으로 나누고(모듈화)', '속은 감추고(정보 은닉)', '껍데기로 감싸는(캡슐화)' 원칙이 절대적이다. 이 4가지는 객체지향이든 절차지향이든 모든 소프트웨어 공학의 심장이다.
Ⅰ. 좋은 소프트웨어 설계의 본질
초보 개발자는 돌아가기만 하는 코드를 짜지만, 훌륭한 설계자는 수만 줄의 코드를 수십 명의 개발자가 협업하여 유지보수할 수 있는 '구조'를 짭니다. 이 구조를 만드는 4대 핵심 원칙이 추상화, 캡슐화, 모듈화, 정보 은닉입니다.
Ⅱ. 4대 설계 원칙 상세
1. 추상화 (Abstraction)
복잡한 현실 세계나 시스템에서 불필요한 세부 사항은 무시하고, 문제 해결에 가장 핵심적이고 공통적인 특징(속성과 행위)만 뽑아내어 단순화하는 과정입니다.
- 기능 추상화: 엑셀에서 '정렬' 버튼 하나만 누르면 내부의 복잡한 Quick Sort 알고리즘은 몰라도 되는 것.
- 자료 추상화: '학생'이라는 클래스를 만들 때, 키나 몸무게는 빼버리고 학번, 이름, 성적만 뽑아내는 것.
2. 모듈화 (Modularity)
거대하고 복잡한 소프트웨어를 하나의 통짜 코드로 짜지 않고, 독립적으로 개발/테스트/배포가 가능한 작고 응집력 있는 부품(모듈) 단위로 쪼개는 것입니다.
- 모듈화가 잘 되면, 결제 시스템(모듈)만 쏙 빼서 다른 프로젝트에 그대로 재사용(Reuse)할 수 있습니다.
3. 정보 은닉 (Information Hiding)
모듈 내부의 복잡한 로직이나 중요한 데이터(자료구조)를 외부에서 함부로 접근하지 못하게 꽁꽁 감추는 원칙입니다.
- 외부에서는 그 모듈이 제공하는 '공개된 인터페이스(Public Method)'를 통해서만 소통할 수 있습니다.
- 정보가 은닉되어 있으면, 내 통장의 잔액(데이터)을 외부에서 마음대로
balance = 0으로 조작할 수 없으며 반드시withdraw()함수를 거쳐야만 합니다. (사이드 이펙트 방지)
4. 캡슐화 (Encapsulation)
서로 연관된 데이터(변수)와 그 데이터를 처리하는 함수(메서드)들을 마치 알약 캡슐 하나에 쓸어 담듯 하나의 묶음(Class)으로 포장하는 기법입니다.
- 캡슐화는 '정보 은닉'을 구현하기 위한 실질적인 수단(도구)으로 사용됩니다. (Java의
private,public접근 제어자 활용)
📢 섹션 요약 비유: '자동차'를 설계할 때, "엔진과 기어는 속도를 내는 장치"라고 정의하는 게 추상화이고, 엔진, 타이어, 브레이크 부품으로 따로 나누어 만드는 게 모듈화입니다. 엔진 내부의 복잡한 피스톤 움직임은 쇳덩이로 덮어 가리는 것이 정보 은닉이며, 운전자는 오직 외부에 노출된 '액셀'과 '브레이크'라는 페달(인터페이스)을 하나의 운전석(캡슐화)에서만 조작할 수 있게 만든 완벽한 설계입니다.