객체지향을 소설로 설명하기

낚시하는 곰·2025년 4월 8일

krafton jungle

목록 보기
49/52

1. 기본 개념 비유

객체 지향(Object-Oriented Programming, OOP)은 프로그램을 "객체들 간의 상호작용"으로 구성하는 방식이다. 이를 소설에 비유하면 다음과 같다:

  • 하나의 소설 = 하나의 프로그램
  • 등장인물 = 객체 (데이터와 행동을 함께 가짐)
  • 등장인물 설계도 = 클래스 (공통 특성을 가진 설계 템플릿)

OOP 4대 핵심 개념과 소설 비유

  1. 캡슐화: 인물의 비밀스러운 정보(예: 과거, 능력치)는 외부에서 직접 접근할 수 없고, 메서드(행동)를 통해서만 확인 가능.
  2. 상속: 왕족 가문처럼, 부모 클래스로부터 특성을 물려받음.
  3. 다형성: 같은 명령(예: "공격하라!")에 대해 기사, 마법사, 궁수가 각자 다르게 반응.
  4. 추상화: 인물이 어떻게 마법을 쓰는지는 감춰두고, 결과만 보여줌 (복잡한 구현 숨김).

2. 인물 추가 시 중요한 원칙

OCP (Open-Closed Principle)

확장에는 열려 있고, 변경에는 닫혀 있어야 한다.

새로운 인물(예: Necromancer)을 추가할 때 기존 코드(이야기 흐름)를 수정하지 않고도 기능을 확장할 수 있어야 한다.

비유 예시

  • 잘못된 방식: 캐릭터 타입마다 if문으로 처리 → 인물 추가 시 기존 코드 수정 필수
  • 좋은 방식: attack() 메서드를 다형성으로 처리 → 인물만 추가하면 자동 확장 가능
class Character {
    void attack(); // 각 인물이 구현
}

class Knight extends Character {
    void attack() { System.out.println("칼 휘두르기!"); }
}

class Necromancer extends Character {
    void attack() { System.out.println("언데드 소환!"); }
}

3. 객체 간 대화 = 메시지 전달

등장인물들이 서로 대화하는 모습은 객체지향에서 객체 간 메시지 전달(message passing) 개념에 해당한다. 객체는 서로의 내부 구현을 몰라도, 메시지를 주고받으며 협력할 수 있다.

class King {
    void command(Knight knight) {
        knight.guardGate();
    }
}

class Knight {
    void guardGate() {
        System.out.println("성문을 지키러 갑니다!");
    }
}

이러한 메시지 전달 구조는 캡슐화, 책임 분리, 낮은 결합도를 가능하게 한다.


4. 메서드는 인물의 행동 또는 성격 표현

  • 메서드는 인물이 할 수 있는 행동 또는 성격 표현 방식으로 볼 수 있다.
  • 예: castSpell()은 마법사의 전형적인 행동, speak()는 캐릭터의 철학이나 말투
class Wizard {
    void castSpell() { System.out.println("불꽃 마법 시전!"); }
    void speak() { System.out.println("진정한 마법은 내면에서 비롯되지."); }
}

5. 인터페이스는 행동 설계서 또는 계약서

인터페이스는 "이런 행동을 할 수 있는 인물이어야 한다"는 **공통된 규칙(설계서)**이다.

interface Warrior {
    void attack();
    void defend();
}

class Knight implements Warrior {
    public void attack() { System.out.println("칼로 공격!"); }
    public void defend() { System.out.println("방패로 막기!"); }
}

이 구조 덕분에 Warrior 타입으로 여러 인물을 다형성 있게 처리할 수 있으며, 확장성과 유연성을 크게 높일 수 있다.


profile
취업 준비생 낚곰입니다!! 반갑습니다!!

0개의 댓글