클래스 기반 언어로 개발을 진행하면서 클래스를 이해하기 위해 사용했던 비유들을 정리한다.
클래스와 객체
| 개념 | 비유 설명 |
|---|
| 클래스 (Class) | 자동차 설계도 (도면, 제작 방법) |
| 객체 (Object) | 설계도로부터 조립되어 만들어진 실제 자동차 |
메서드와 변수
| 개념 | 비유 설명 |
|---|
| 변수 (Field) | 자동차의 상태 (속도, 연료량 등) |
| 메서드 (Method) | 자동차가 할 수 있는 행위 (운전, 브레이크 등) |
접근 제한자 (Access Modifiers)
| 제한자 | 의미 | 비유 설명 |
|---|
private | 클래스 내부에서만 접근 가능 | 자동차 내부의 비밀 설정값 (예: ECU 설정) |
protected | 같은 패키지 또는 하위 클래스에서만 접근 가능 | 같은 브랜드의 자동차끼리 공유하는 내부 기능 |
public | 누구나 접근 가능 | 운전자가 사용하는 기능 (예: 브레이크, 라이트) |
| (default) | 같은 패키지 내에서만 접근 가능 | 같은 부서에서만 열람 가능한 설계도 |
static
| 개념 | 비유 설명 |
|---|
static 변수 | 모든 자동차가 공유하는 공용 표준값 예: 공인 타이어 사이즈 |
static 메서드 | 자동차를 만들기 전에, 설계도에 정의된 도구로 미리 작업할 수 있는 기능 예: 설계도만으로 최대 속도 계산, 자동차 번호판 포맷 생성 등 |
static 클래스 | 자동차와 무관하게 작동 가능한 독립 유틸리티 도구함 예: 범용 계산기 모음, 형식 변환 도구 등 |
내부 클래스 (Inner Class)
| 개념 | 비유 설명 |
|---|
| 일반 내부 클래스 | 자동차 안에 포함된 하위 부품 (예: 오디오 시스템, 내비게이션) |
정적 내부 클래스 (static nested class) | 자동차 없이도 쓸 수 있는 독립 부품 설계도 (예: 범용 배터리 설계도) |
private 생성자와 static factory method
| 개념 | 비유 설명 |
|---|
private 생성자 | 외부에선 자동차를 직접 조립할 수 없고, 공장 내부에서만 조립 가능 |
static factory method | 설계도가 제공하는 공식 조립 절차 (예: createElectricCar()로 전기차 생산 요청) |
우리는 직접 생성자 호출로 객체를 만들지 않고,
설계도에 정의된 공식 조립 절차(static factory method)를 통해 객체를 생성한다.
이 절차는 내부 로직을 감추고 캡슐화를 강화한다.
생성자 주입과 private final
| 개념 | 비유 설명 |
|---|
private final Engine engine; | 외부에서 조달한 부품을 조립 시 단 한 번 넣고, 이후에는 변경 불가한 고정 엔진 부품 |
패키지 (Package)
| 개념 | 비유 설명 |
|---|
| 패키지 | 관련 설계도를 모아둔 기능별 폴더 (예: engine 패키지 = 엔진 관련 설계도 모음) |
추상 클래스와 인터페이스
| 개념 | 비유 설명 |
|---|
| 추상 클래스 (Abstract Class) | 여러 자동차 설계도가 공유하는 공통 기능이 담긴 기본 설계도 |
| 인터페이스 (Interface) | 행동 명세서 (행동이 정의되어 있고, 구현은 각 설계도에서 수행) |
추상 클래스는 일부 구현을 제공하지만, 인터페이스는 구현 없이 규칙만 정한다.
다양한 자동차 설계도가 각자 방식대로 이 규칙을 구현해야 한다.
객체지향의 핵심 네 가지 개념 요약
| 개념 | 자동차 비유 |
|---|
| 캡슐화 | 자동차 내부 설계(엔진, 회로 등)는 숨기고, 운전자는 버튼만 누르면 작동 |
| 상속 | 전기차가 일반 자동차 설계도를 상속받고, 배터리 같은 추가 기능을 덧붙임 |
| 다형성 | "운전 가능"이라는 역할(인터페이스)은 같지만, 휘발유차, 전기차, 자율주행차 등은 각기 다른 방식으로 그 역할을 수행함 |
| 추상화 | "운전 가능"이라는 기능만 정의하고, 실제 운전 방식은 설계도(구현체)에 따라 다르게 구성됨 |