강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

김가현님의 프로필 이미지
김가현

작성한 질문수

(2026) 일주일만에 합격하는 정보처리기사 실기

업캐스팅 (부모 형태, 자식 생성자)

6분 40초 질문

해결된 질문

작성

·

21

·

수정됨

0

선생님.... 제가 질문이 좀 많습니다....

main 바로 다음에 A b = new B(); 라고 되어있는데, A b가 왜 class B로 되는거죠?? 대소문자도 구분 해야하는거 아닌가요>>>? B를 b로 지정하거나 뭘 하겠다고 한건 없는거 같은데 이해가 안됩니다. 그냥 A라는 부모가 가진 것을 new B라는 자식이라고 A b로 새롭게 정의해서 new B = b라고 보면 되나요?

답변 2

1

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요, 질문 많이 하셔도 괜찮습니다.

다만 제가 바로바로 답변할 수 있을 지가 걱정이네요.

 

핵심: A b는 class B로 "되는" 게 아닙니다.

A b = new B();를 풀어서 설명하면:

A b = new B();
//↑ ↑   ↑   ↑
//│ │   │   └─ B 클래스의 기본 생성자 호출
//│ │   └───── 새로운 객체 생성
//│ └───────── 변수명 (소문자 b)
//└─────────── 변수의 타입 (클래스 A)

 

1. 대소문자 구분

  • A, B (대문자) = 클래스 이름

  • b (소문자) = 변수 이름

Java는 대소문자를 엄격히 구분합니다. bB는 완전히 다른 것입니다.

 

A b = new B(); 이 문장은 아래와 같이 이해해야합니다.

  • 실제 생성되는 객체: B 타입 (자식)

  • 변수 b의 타입: A 타입 (부모)

  • 의미: "B 객체를 만들었지만, A 타입 변수로 참조하겠다"

 

2. 왜 이렇게 쓸까요?

// 예시
class Animal {  // 부모
    void sound() { System.out.println("..."); }
}

class Dog extends Animal {  // 자식
    void sound() { System.out.println("멍멍"); }
}

class Cat extends Animal {  // 자식
    void sound() { System.out.println("야옹"); }
}

// 사용
Animal pet1 = new Dog();  // Dog 객체를 Animal 타입으로
Animal pet2 = new Cat();  // Cat 객체를 Animal 타입으로

pet1.sound();  // "멍멍" 출력 (실제는 Dog)
pet2.sound();  // "야옹" 출력 (실제는 Cat)

이렇게 하면 다양한 자식 객체들을 부모 타입 하나로 관리할 수 있습니다.

 

 

3. 주의사항

A b = new B();
b.메서드();  // A에 있는 메서드만 호출 가능
                // B에만 있는 메서드는 호출 불가

변수 타입이 A이므로, A에 정의된 메서드만 사용할 수 있습니다.

(단, 오버라이딩된 메서드는 B의 구현이 실행됨)


핵심 요약: A b = new B();는 "B 객체를 만들어서 A 타입 변수로 가리킨다"는 의미입니다.

 

김가현님의 프로필 이미지
김가현
질문자

자료 만드신 것 중에 특별히 외워야하는 내용에 대해서 따로 올려두신게 있을까요?

주말코딩님의 프로필 이미지
주말코딩
지식공유자

보통 매 강의 챕터 끝에 외워야 할 것들을 정리해드립니다.

 

다만 업캐스팅은..

Java 개발자가 아닌 이상 초보자가 처음 들어서 이해하기가 굉장히 어렵습니다.

왜냐하면 실제로 저것을 사용하는 코드를 작성을 해봤어야 직관적으로 이해가 됩니다.

 

우리는 개발자가 되려고 공부하는 게 아니라, 지금 시험을 합격하기 위해서 배우는 거라서

저렇게 직관적으로 받아들이기가 어려운 것들은 그저 암기하라고 말씀드립니다.

 

Java에서는 보통 3가지를 말씀드리는데요,

  • 업캐스팅과 재정의(override)

  • 생성자의 호출순서 (super나 this가 있는 곳..)

  • 같지만 다른 것 챕터 부분의 캐싱과 Wrapper 클래스입니다.

그 외에는 직관적으로 이해하기가 크게 어렵지 않으실 겁니다.

0

안녕하세요, 인프런 AI 인턴입니다. 김가현님.

질문하신 내용은 Java에서 발생하는 클래스와 객체 선언에 관한 것 같습니다. A b = new B();이라는 구문에서 A는 클래스 타입을, b는 변수 이름(참조 변수)을 의미하며, B()B 클래스의 객체 생성자를 호출하는 것입니다. 이 구문에서 선생님께서 설명하신 대로 업캐스팅(upcasting)이라는 개념이 사용됩니다.

업캐스팅 설명

  • 업캐스팅이란 자식 클래스의 객체를 부모 클래스 타입으로 참조하는 것을 의미합니다. 즉, B 클래스가 A 클래스를 상속받고 있다면, B 객체는 A 타입으로 참조할 수 있습니다.
  • 이 구문에서 B 클래스의 인스턴스는 A 타입으로 선언된 b라는 참조 변수에 담긴 것입니다.

이해를 돕기 위한 추가 설명

  • 자바는 타입 시스템에서 대소문자를 구분합니다. 변수 b는 소문자이며, 클래스 B는 대문자로 시작합니다. 이는 자바의 명명 규칙에 따른 것입니다.
  • 클래스 이름 관례: 대문자로 시작 (B)
  • 변수 이름 관례: 소문자로 시작 (b)

이와 관련된 유사한 질문과 답변을 확인하고 싶으시면 아래의 링크를 참고하세요:

관련 질문 URL:

  1. Java 상속과 생성자 호출 경로
    • 상속 관계에서 생성자의 호출 순서와 관련한 논의가 이루어지고 있으며, 비슷한 상황에서의 작동 방식을 명확하게 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김가현님의 프로필 이미지
김가현

작성한 질문수

질문하기