Java 상속과 생성자 흐름 완전 정복

2025. 8. 4. 15:50·Back-End/Java

🧾 Java 객체지향 예제 총정리 (실전 기반 정리)

생성자 → 상속 → 오버라이딩 → 변수 숨김 → 실전 시스템 구현까지!
개념부터 예제, 자주 나오는 오류까지 한 번에 정리해 보았습니다.


🔹 1. 생성자 (Constructor) 이해하기

✅ 핵심 개념

  • 생성자는 객체 생성 시 자동 호출되는 특수한 메서드
  • 클래스명과 동일한 이름, 반환 타입 없음
  • 기본 생성자는 사용자 정의 생성자가 없을 경우 자동 생성
  • this()를 사용해 다른 생성자 호출 가능 (단, 반드시 첫 줄에 위치해야 함)

🔍 주요 코드 포인트

Car(String color) {
    this(color, "auto", 4);  // 다른 생성자 호출
    door = 6;                // this() 다음 줄부터 가능
}

⚠️ 자주 발생하는 오류

위치 내용
Car(String color) this()가 첫 줄이 아니면 컴파일 오류 발생

 


🔹 2. 상속 기본 구조

✅ 핵심 개념

  • extends 키워드로 부모 클래스 상속
  • 자식 클래스는 부모의 필드/메서드 상속 및 확장 가능
  • 단방향 상속만 가능 (부모 → 자식)

🔍 예시 흐름

class Animal {
    String name;
}
class Dog extends Animal {
    void bark() { ... }
}

⚠️ 주의할 점

Tv tv1 = new Tv();
tv1.ott = true;  // ❌ 자식 필드는 부모 객체에서 접근 불가

🔹 3. 상속 시 생성자 호출 순서

✅ 핵심 개념

  • 자식 객체 생성 시 부모 생성자 먼저 호출됨
  • super()로 부모 생성자를 명시적으로 호출 가능
  • this()는 같은 클래스 내 다른 생성자 호출용

🔍 실행 흐름 예시

Cat cat1 = new Cat();
// 출력:
// 빈 부모 생성자 - 인스턴스 생성
// 빈 자식 생성자 - 인스턴스 생성

🔹 4. 메서드 오버라이딩

✅ 핵심 개념

  • 상속 구조에서 부모 메서드를 자식이 재정의(Override) 가능
  • 메서드 시그니처가 동일해야 오버라이딩 성립
  • @Override 어노테이션을 사용하면 컴파일러가 검증해줌

🆚 오버로딩 vs 오버라이딩 비교

항목 오버로딩(Overloading) 오버라이딩(Overriding)
적용 위치 같은 클래스 상속 관계
조건 이름 같고 매개변수 다름 이름, 매개변수, 리턴 타입 동일
키워드 없음 @Override 사용 권장
 

🔹 5. 변수 숨김 (Hiding)과 필드 독립성 – E_Practice.java

✅ 핵심 개념

  • 자식 클래스에서 부모와 같은 이름의 필드를 선언하면 "숨김(hiding)" 발생
  • 필드는 오버라이딩 불가, 단순히 숨겨짐
  • 부모의 필드는 super.필드명으로 접근 가능

🔍 코드 흐름

System.out.println("이름: " + name);       // 자식 필드
System.out.println("나이: " + super.age); // 부모 필드

  •  
 

🧠 자주 나오는 오류 총정리

유형 코드위치 설명
this() 위치 오류 생성자 내 두 번째 줄 이후에 위치 생성자 첫 줄에서만 호출 가능
필드 접근 오류 tv1.ott = true; 부모 객체에서 자식 필드 접근 불가
파일명 불일치 public class Abc {} 파일명과 클래스명이 다르면 컴파일 오류

🎓 자바 OOP로 구현한 학생 관리 시스템 예제

 

📌 핵심 기능 요약

항목 설명
목적 학생 정보를 등록, 조회, 수정할 수 있는 간단한 콘솔 기반 프로그램
주요 클래스 Student, StudentManagementApp
기능 학생 등록, 전체 조회, ID로 검색, GPA 업데이트
사용 개념 클래스, 생성자 오버로딩, ArrayList, static 메서드, 객체 배열
 

🧱 코드 구조 및 동작 설명

1. Student 클래스

  • 학생의 정보를 담는 도메인 클래스
  • 필드: studentId, name, age, major, gpa
  • 메서드:
    • printStudentInfo() : 정보 출력
    • updateGpa(double) : GPA 변경
  • 생성자 오버로딩을 통해 기본 생성자 + 매개변수 생성자 2종 제공

2. StudentManagementApp 클래스

  • 실행용 메인 클래스 (public class)
  • students: ArrayList<Student> 타입의 정적 리스트
  • 주요 메서드 (전부 static → 인스턴스화 없이 바로 사용 가능):
    • addStudent(...)
    • printAllStudents()
    • findStudentById(...)
    • updateStudentGpa(...)
  • main 메서드 내에서 학생 등록 → 전체 조회 → 단건 조회 → GPA 업데이트 흐름 실행

🔍 주요 코드 분석

✅ 학생 등록 메서드

static void addStudent(int id, String name, int age, String major, double gpa) {
    Student student = new Student(id, name, age, major, gpa);
    students.add(student);
    System.out.println(name + " 학생이 등록되었습니다.");
}
  • new Student(...)로 객체 생성 후 리스트에 추가
  • 객체 배열 대신 ArrayList 사용 → 크기 동적 확장 가능

✅ 단일 조회 (ID 기반)

static void findStudentById(int studentId) {
    for (Student student : students) {
        if (student.studentId == studentId) {
            student.printStudentInfo();
            return;
        }
    }
    System.out.println(studentId + " 해당 ID의 학생을 찾을 수 없습니다.");
}
  • 조건 충족 시 즉시 return → 효율적인 검색
  • 못 찾으면 안내 메시지 출력

⚠️ 오류 발생 가능 포인트 및 주의사항

위치 설명 원인 해결 방법
public class StudentManagementApp 외 다른 클래스에 public 키워드 ❌ 오류 발생: 클래스명.java와 public 클래스명이 다를 경우 Java는 파일명과 public 클래스명이 반드시 동일해야 함 Student는 public 클래스일 수 없음
updateStudentGpa(2, 4.1) ✅ 현재는 문제 없음 하지만 GPA가 4.5 초과일 경우 유효성 체크 없음 if(newGpa <= 4.5) 등의 검증 추가 가능
students가 static이 아니었다면? ❌ main에서 접근 불가 static context에서 non-static 필드 접근 불가 오류 발생 students 필드는 static이어야 함

 

'Back-End > Java' 카테고리의 다른 글

추상 클래스 vs 인터페이스 – 차이, 특징, 활용법  (3) 2025.08.08
접근제어자부터 다형성까지, 자바 객체지향 필수 문법 모음  (2) 2025.08.06
Java 메서드 완벽 가이드: 개념부터 오버로딩까지  (1) 2025.07.31
객체 지향 프로그래밍(OOP) 란?  (3) 2025.07.28
자바 배열의 모든 것: 코드로 배우는 핵심 개념  (2) 2025.07.23
'Back-End/Java' 카테고리의 다른 글
  • 추상 클래스 vs 인터페이스 – 차이, 특징, 활용법
  • 접근제어자부터 다형성까지, 자바 객체지향 필수 문법 모음
  • Java 메서드 완벽 가이드: 개념부터 오버로딩까지
  • 객체 지향 프로그래밍(OOP) 란?
rpsnrpsn
rpsnrpsn
rpsnrpsn 님의 블로그 입니다.
  • rpsnrpsn
    rpsnrpsn 님의 블로그
    rpsnrpsn
  • 전체
    오늘
    어제
    • 분류 전체보기 (21)
      • Back-End (18)
        • Java (17)
        • DB (1)
      • Front-End (3)
        • HTML (1)
        • CSS (0)
        • JavaScript (1)
        • Etc. (1)
  • 블로그 메뉴

    • 홈
    • Github
  • hELLO· Designed By정상우.v4.10.4
rpsnrpsn
Java 상속과 생성자 흐름 완전 정복
상단으로

티스토리툴바