절차 지향 프로그래밍 vs 객체 지향 프로그래밍
절차 지향 프로그래밍
- 이름 그대로 절차를 지향하고 실행 순서를 중요하게 생각하는 방식.
- 프로그램의 흐름을 순차적으로 따르며 처리함. ("어떻게")
- 데이터와 해당 데이터에 대한 처리 방식이 분리되어 있음.
객체 지향 프로그래밍
- 이름 그대로 객체를 지향하고 객체를 중요하게 생각하는 방식.
- 객체들 간의 상호작용을 중심으로 프로그래밍하는 방식. ("무엇을")
- 데이터와 그 데이터에 대한 행동(메서드)이 하나의 객체 안에 함께 포함.

→ 절차 지향 프로그래밍으로 작성한 음악 플레이어 프로그램

→ 뮤직 플레이어와 관련된 데이터는 클래스로 만들어 묶음.


→ 뮤직 플레이어와 관련된 행동은 메서드로 따로 빼둠.
위와 같이 클래스화 및 모듈화를 통해 중복 제거, 코드 변경 용이, 메서드 이름을 통한 직관적 이해 등의 효과를 얻을 수 있다.
다만, 이 모든 것은 아직 절차 지향 프로그래밍임.
절차 지향 프로그래밍의 한계
위의 코드의 한계는 데이터와 기능이 분리되어 있다는 점임.
데이터는 `MusicPlayerData`를 사용하여야 하고, 기능은 `MusicPlayerMain2`의 메서드를 사용하여야 함.
데이터와 기능은 매우 밀접하게 연관되어 있기에 데이터가 변경되면 `MusicPlayerMain2` 부분의 메서드들도 모두 함께 변경되어야 함. → 코드 유지보수 관점에서도 관리 포인트가 2곳으로 늘어남.
클래스와 메서드
클래스는 데이터인 멤버 변수뿐만 아니라, 기능 역할을 하는 메서드도 포함할 수 있다.
즉, 자바와 같은 객체 지향 언어는 클래스 내부에 속성(데이터)과 기능(메서드)을 함께 포함할 수 있다.

→ ValueObject 클래스에 `add()` 메서드를 정의하였다. (`static void` 가 아닌 그냥 `void`)
※ 메서드는 객체를 생성해야 호출 할 수 있다. 그런데 `static`이 붙으면 객체를 생성하지 않고도 호출 가능하다.

→ 인스턴스의 메서드를 호출하는 방법은 멤버 변수를 사용하는 것과 동일하게 `.`으로 객체에 접근 후 호출.
→ `add()` 메서드 내부에 있는 value는 기본으로 본인 인스턴스에 있는 멤버 변수에 접근한다.
즉, 객체의 메서드 내부에서 접근하는 멤버 변수는 객체 자신의 멤버 변수이다.

객체 지향 프로그래밍
지금까지 작성한 음악 플레이어 코드는 데이터와 기능이 분리됨.
이젠 기능을 하나로 묶어 음악 플레이어라는 개념을 온전히 하나의 클래스에 담아보자.
→ 음악 플레이어가 어떤 속성(데이터), 어떤 기능(메서드)을 제공하는지에 초점을 맞춰 구성.


→ MusicPlayer 객체를 생성하고 필요한 메서드를 호출하기만 하면 된다.
캡슐화
속성과 기능을 하나로 묶어서 필요한 기능을 메서드를 통해 외부에 제공하는 것.
사용하는 입장에서 직관적으로 객체를 이해하여 사용하기에 코드가 읽기 쉽고, 속성과 기능이 한 곳에 있기 때문에 변경도 더 쉬워짐.
변경사항이 있을 경우 객체 부분만 수정하면 되고, 객체를 사용하는 입장에서 코드를 변경할 필요가 없음.
※ 본 게시글은 인프런 '김영한의 자바 입문' 강의의 학습용으로 작성되었습니다
'개발 > [자바 기본]' 카테고리의 다른 글
| [자바 기본] 06 접근 제어자와 캡슐화 (0) | 2025.12.31 |
|---|---|
| [자바 기본] 05 패키지 (0) | 2025.12.30 |
| [자바 기본] 04 생성자, this (0) | 2025.12.30 |
| [자바 기본] 02 참조형 (0) | 2025.12.30 |
| [자바 기본] 01 클래스와 데이터 (0) | 2025.12.29 |