TIL - 20250702

juni·2025년 7월 2일

TIL

목록 보기
54/316

📘 자바 학습 정리 - 다형성 심화, 캐스팅, static (0702)

1. 업캐스팅과 다운캐스팅

✅ 업캐스팅 (Upcasting)

  • 자식 객체를 부모 타입으로 참조하는 것.
  • 자동 형변환이 일어나며, 부모가 물려준 멤버(메서드)만 사용 가능.
  • 자식의 고유 기능을 사용하려면 다운캐스팅 필요.
Parent parent = new Child(); // 업캐스팅
parent.parentMethod();       // 가능
((Child) parent).childMethod(); // 다운캐스팅 후 자식 메서드 호출 가능

⚠️ 다운캐스팅은 instanceof로 타입 체크 후 사용해야 안전하다.


2. 다형성 활용 실습 예시

🧑‍💻 클래스 구조

  • Employee 클래스 (공통 기능)
  • Developer, Designer: Employee를 상속받고 고유 기능 정의
  • Owner: Employee에게 orderWork(Employee) 메서드를 통해 지시

🔍 핵심 포인트

  • 메서드에서 Employee 타입으로 받아서 다양한 하위 객체 처리
  • instanceof로 실제 타입 판단 후 다운캐스팅 수행
if (employee instanceof Developer) {
    ((Developer)employee).develop();
}

3. 메시지 전송 다형성 실습

구조

  • Messenger (공통 부모 클래스)
  • User, Admin이 상속받아 sendMessage() 오버라이딩
  • MessageRelay가 메시지를 받아서 Messenger 타입에 따라 전달
messageRelay.relay(user, "Hello!");  // 사용자 메시지 출력
messageRelay.relay(admin, "서버 점검 예정"); // 관리자 메시지 출력

하나의 메서드가 여러 객체의 메시지 처리 방식 다르게 실행 = 다형성 활용!


4. static (정적 변수와 메서드)

static 필드

  • 클래스 변수: 모든 인스턴스가 공유함.
  • 객체 생성 없이 사용 가능.
public static int x;

static 메서드

  • 클래스 소속으로 객체 생성 없이 호출 가능.
  • this 사용 불가, 인스턴스 필드 접근 불가.
public static void m1() {
    System.out.println("static method");
}

예시

Count.x++;    // 클래스 변수 증가
c1.y++;       // 인스턴스 변수는 객체별로 따로 존재

5. 원 넓이 계산기 예제

Calculator 클래스

  • 색상은 인스턴스 필드
  • 원주율 pi는 static 필드
  • 원 넓이 계산은 static 메서드로 구현
static double calcCircleArea(double r) {
    return pi * r * r;
}

모든 계산기 인스턴스가 동일한 pi 값을 공유함


✅ 요약

주제핵심 개념
업캐스팅자식 → 부모 자동 형변환. 부모 멤버만 사용 가능
다운캐스팅부모 → 자식 수동 형변환. instanceof 필요
다형성하나의 메서드가 다양한 자식 객체에 대해 다르게 동작
static 필드클래스가 공유하는 변수
static 메서드클래스가 공유하는 기능, 인스턴스 없이 호출 가능

0개의 댓글