본문 바로가기
Backend/Backend 관련 학습 내용

객체지향 프로그래밍 설계하기 & 상속관계에서 객체생성 및 Override

by pjhcsol 2024. 11. 29.

상속과 다형성은 객체지향에서 매우 기본적이고 중요한 개념입니다. 레퍼런스를 기반으로 반복적으로 숙지하시면 좋다.

 

part4. 객체지향 프로그래밍 설계하기

CH2. 상속관계에서 객체생성 및 Override

  • 동작측면에서 클래스 설계하기
    개념:
    객체 지향 프로그래밍에서 클래스 설계는 매우 중요합니다. 특히 상속 관계에서는 부모 클래스와 자식 클래스 간의 역할과 관계를 명확히 정의해야 합니다. 동작측면에서 클래스를 설계할 때에는 각 클래스의 책임과 행동을 고려해야 합니다.
    예시:
    객체 지향 프로그래밍에서 클래스 설계는 매우 중요합니다. 특히 상속 관계에서는 부모 클래스와 자식 클래스 간의 역할과 관계를 명확히 정의해야 합니다. 동작측면에서 클래스를 설계할 때에는 각 클래스의 책임과 행동을 고려해야 합니다.
    // 클래스 설계 예시
  • class Person {
  •     public void introduce() {
  •         System.out.println("안녕하세요, 저는 사람입니다.");
  •     }
  • }
  • class Student extends Person {
  •     @Override
  •     public void introduce() {
  •         System.out.println("안녕하세요, 저는 학생입니다.");
  •     }
  • }
  • class Teacher extends Person {
  •     @Override
  •     public void introduce() {
  •         System.out.println("안녕하세요, 저는 선생님입니다.");
  •     }
  • }

  • // 클래스 설계 예시 class Person { public void introduce() { System.out.println("안녕하세요, 저는 사람입니다."); } }
    class Student extends Person { @Override public void introduce() { System.out.println("안녕하세요, 저는 학생입니다."); } }
    class Teacher extends Person { @Override public void introduce() { System.out.println("안녕하세요, 저는 선생님입니다."); } }
    // 클래스 설계 예시 class Person { public void introduce() { System.out.println("안녕하세요, 저는 사람입니다."); } }
    class Student extends Person { @Override public void introduce() { System.out.println("안녕하세요, 저는 학생입니다."); } }
    class Teacher extends Person { @Override public void introduce() { System.out.println("안녕하세요, 저는 선생님입니다."); } }
  • 상속관계에서 객체생성 방법
    개념:
    상속 관계에서는 자식 클래스의 객체를 생성할 때 부모 클래스의 생성자를 호출하여 초기화해야 합니다. 이때 super 키워드를 사용하여 부모 클래스의 생성자를 명시적으로 호출합니다.
    예시:
    // 객체 생성 예시
  • Person person = new Person();
  • Student student = new Student();
  • Teacher teacher = new Teacher();

  • // 객체 생성 예시 Person person = new Person(); Student student = new Student(); Teacher teacher = new Teacher();
  • java
    Copy code
    // 객체 생성 예시 Person person = new Person(); Student student = new Student(); Teacherteacher = new Teacher();
  • 상속 체이닝과 super
    개념:
    상속 체이닝은 자식 클래스에서 부모 클래스의 생성자를 호출하는 과정을 의미합니다. 이를 통해 부모 클래스의 멤버 변수를 초기화하고, 상속 관계를 유지합니다. super 키워드는 이러한 상속 체이닝을 구현할 때 사용됩니다.
    예시:
    // 상속 체이닝 및 super 키워드 예시
  • class Person {
  •     private String name;
  •     public Person(String name) {
  •         this.name = name;
  •     }
  • }
  • class Student extends Person {
  •     private int grade;
  •     public Student(String name, int grade) {
  •         super(name);
  •         this.grade = grade;
  •     }
  • }
  • 메서드의 재정의(Override)란
    개념:
    메서드의 재정의는 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 다시 정의하여 사용하는 것을 의미합니다. 이를 통해 자식 클래스는 부모 클래스의 동작을 변경하거나 확장할 수 있습니다.
    예시:
    // 메서드 재정의 예시
  • class Person {
  •     public void introduce() {
  •         System.out.println("안녕하세요, 저는 사람입니다.");
  •     }
  • }
  • class Student extends Person {
  •     @Override
  •     public void introduce() {
  •         System.out.println("안녕하세요, 저는 학생입니다.");
  •     }
  • }

CH3. 객체 형변환(Object Casting)

  • 부모와 자식 간에 형 변환이 된다
    개념:
    객체 형변환은 상속 관계에서 부모 클래스와 자식 클래스 간의 타입 변환을 의미합니다. 이를 통해 부모 클래스 타입의 변수로 자식 클래스 객체를 참조할 수 있습니다.
    예시:
    // 객체 형변환 예시
  • Person person = new Student();
  • Upcasting 과 Downcasting
    개념:
    Upcasting은 자식 클래스 타입을 부모 클래스 타입으로 변환하는 것을 말하며, Downcasting은 부모 클래스 타입을 자식 클래스 타입으로 변환하는 것입니다. 이때 명시적인 형변환 연산자가 사용됩니다.
    예시:
    // Upcasting과 Downcasting 예시
  • Person person = new Student();
  • Student student = (Student) person;

CH4. 다형성(Polymorphism)과 활용

  • 다형성이란 무엇인가
    개념:
    다형성은 같은 이름의 메서드나 연산자가 다른 동작을 수행할 수 있는 것을 의미합니다. 이는 상속과 메서드 오버라이딩을 전제로 하며, 부모 클래스 타입의 변수로 다양한 자식 클래스 객체를 참조하여 사용할 수 있습니다.
    예시:
    // 다형성 예시
  • Person person1 = new Student();
  • Person person2 = new Teacher();
  • 다형성 이론을 설명하기 위한 전제조건
    개념:
    다형성을 활용하기 위해서는 상속 관계에 있는 클래스들 간에 메서드 오버라이딩이 되어 있어야 합니다.
    예시:
    // 다형성을 위한 전제조건 예시
  • class Person {
  •     public void introduce() {
  •         System.out.println("안녕하세요, 저는 사람입니다.");
  •     }
  • }
  • class Student extends Person {
  •     @Override
  •     public void introduce() {
  •         System.out.println("안녕하세요, 저는 학생입니다.");
  •     }
  • }
  • 다형성 활용(다형성 인수)
    개념:
    메서드의 매개변수로 부모 클래스 타입을 사용하여 다양한 자식 클래스 객체를 전달할 수 있습니다. 이를 통해 하나의 메서드가 여러 타입의 객체를 처리할 수 있습니다.
    예시:
    // 다형성 인수 예시
  • class PetOwner {
  •     public void playWithPet(Person person) {
  •         System.out.println("주인이 펫과 놀고 있습니다.");
  •     }
  • }
  • 다형성 활용(다형성 배열)
    개념:
    배열의 원소로 여러 타입의 객체를 가질 수 있습니다. 부모 클래스 타입의 배열에 여러 종류의 자식 클래스 객체를 담을 수 있습니다.
    예시:
    // 다형성 배열 예시
  • Person[] people = new Person[2];
  • people[0] = new Student();
  • people[1] = new Teacher();