객체지향, 이태양으로 조금씩 이해하기
이 글은 까칠하지만 유도와 운전을 잘하는 법학부생 이태양을 중심으로 ‘객체(Object)’와 ‘객체지향(Object-Oriented Programming, OOP)’을 쉽게 풀어 설명한다~
“데이터와 기능을 묶는다”는 말의 의미
객체란 정보를 단순히 저장하는 것이 아니라, 그 정보로 할 수 있는 행동까지 함께 묶은 단위를 말한다. 예를 들어 태양이의 휴대폰 연락처를 생각해보자면
- 데이터: 이름 = "이태양", 전화번호 = "010-1234-5678"
- 기능: 전화 걸기, 문자 보내기
절차지향에서는 ‘이름을 찾고 → 번호를 넣고 → 전화를 건다’처럼 따로 처리했지만, 객체지향에서는 ‘태양이’ 자체가 전화 걸기 기능을 포함하고 있다. 즉, 외부에서는 “태양이한테 전화 걸기”라고만 하면 내부적으로 번호 검색과 연결이 알아서 실행될 수 있는 것이다.
이처럼 객체는 데이터(정보) + 기능(행동)이 하나로 묶인 완성된 단위를 말한다.
“데이터에 접근하는 방법”이란?
데이터에 접근하는 방법은 “객체 안의 정보를 바꾸거나 읽는 통로”를 의미한다. 태양이가 까칠한 성격을 가졌다고 할 때, 외부에서 바로 “착하게 바꿔!” 할 순 없다. 대신 “진정시키기” 같은 행동을 통해서만 바꿀 수 있다.
이게 바로 캡슐화(encapsulation)라는건데 이건 추후에 알게 될 것 이다. 객체는 자기 내부의 정보를 보호하고, 외부에는 필요한 방법만 제공한다.
<코드로 원한다면 짜줄 수 있음>
객체지향은 언어인가, 아니면 개발 방법인가?
정답은 둘 다 관련 있지만, 핵심은 ‘사고방식’이다.
- 객체지향 언어: Java, C++, Python처럼 객체지향 구조를 쉽게 만들 수 있도록 문법을 제공하는 언어들
- 객체지향적 사고방식: 언어와 상관없이 객체 중심으로 생각하고 코드 구조를 짜는 방법
예를 들어 JavaScript는 완전한 객체지향 언어는 아니지만, 개발자가 객체처럼 사고하면 충분히 객체지향적인 코드 작성이 가능함.
즉, 언어는 도구, 객체지향은 철학과 설계 방식이다.
객체, 데이터, 메서드를 굳이 나누는 이유
“어차피 코드로 짜면 똑같은데 왜 구분하죠?” 이 구분이 중요한 이유는 바로 유지보수성과 확장성 때문인데,
회사 조직을 예로 들어보자
- 데이터 = 직원 정보 (이름, 부서, 직책)
- 메서드 = 직원이 하는 일 (보고하기, 회의하기, 결재받기)
- 객체 = 각각의 직원 (이태양, 김민수, 박지훈…)
만약 모든 정보를 하나의 파일에 다 넣고 처리한다면, 한 명의 업무가 바뀔 때 전체 코드를 고쳐야 한다. 하지만 객체별로 역할을 나눠두면, 해당 직원(객체)만 수정하면 된다.
이렇게 객체 단위로 책임을 분리하면 수정이 쉬워지고 다른 부분에 영향을 주지 않아 안정적인 프로그램 구조를 만들 수 있다.
나의 수정이 다른곳에 영향을 주지 않는 것은 매우 중요하다.
정리
질문핵심 요약
| 데이터와 기능을 묶는다? | 정보(데이터)와 그 정보로 할 수 있는 행동(기능)을 한 덩어리로 묶는 것. 예: 태양이는 전화번호(데이터)와 전화 걸기(행동)를 함께 가짐. |
| 데이터 접근 방법이란? | 객체 내부 정보를 바꾸거나 읽는 통로. 직접 수정 대신 행동을 통해 접근. |
| 객체지향은 언어인가, 방식인가? | 언어는 도구, 객체지향은 사고방식. JS도 객체지향적으로 작성 가능. |
| 왜 굳이 구분하나? | 유지보수, 확장, 협업 효율을 위해. 각 객체가 자기 역할을 가지면 수정이 국소화됨. |
정리하자면, 이태양은 ‘사람’이라는 설계도로부터 만들어진 객체이며, 자신의 데이터(성격, 학과, 능력)와 행동(운전, 유도)을 스스로 가지고 있다. 객체지향은 바로 이런 ‘이태양처럼 행동하는 코드’를 만드는 철학이라 생각하면 된다.