객체지향 (1) - 상속

Yunsung·2024년 12월 28일
post-thumbnail

객체지향은 코드의 재사용성과 확장성을 높이고, 유지보수를 쉽게 하는 등의 장점이 있습니다. 여기서는 객체지향의 주요 개념과 특징에 대해 설명하겠습니다.

객체지향의 주요 개념✔

객체지향에서는 클래스, 객체, 상속, 다형성, 캡슐화(은닉화), 추상화가 있습니다.
이 글에서는 클래스, 객체, 상속까지 하고 나머지는 다음 글에 작성하겠습니다!!

1. 클래스©(Class)

객체를 생성하기 위한 설계도 또는 템플릿입니다. 클래스는 객체의 속성(필드)과 메서드(기능)를 정의합니다. 예를 들어, 자동차라는 클래스를 정의하면, 이 클래스에는 자동차의 속성(모델, 색상 등)과 기능(운전, 멈춤 등)을 포함할 수 있습니다.

2. 객체(Object)

클래스를 기반으로 생성된 실제 인스턴스입니다. 객체는 클래스에서 정의된 속성과 메서드를 가집니다. 예를 들어, 자동차 클래스에서 파란색 제네시스라는 객체를 생성할 수 있습니다. 이 객체는 자동차 클래스에서 정의된 속성과 기능을 갖게 됩니다.

3. 상속(Inheritance)👩‍👩‍👦

부모 클래스의 속성과 메서드를 자식 클래스가 물려받는 개념입니다. 상속을 통해 코드의 중복을 줄이고, 기능을 확장할 수 있습니다.

1. 상속 구문 ⚠

  • 자식 클래스는 extends 키워드를 사용하여 부모 클래스를 상속받습니다.
  • 예를 들어, StrudentVO 클래스는 PersionVO 클래스를 상속받습니다.
    public class StudentVO extends PersonVO {
       // 자식 클래스의 특성 (추가적인 멤버변수 및 메서드)
    }

2. 공통 요소의 재사용 ♻

  • 상속을 사용하면 자식 클래스가 부모 클래스의 공통 요소를 재사용할 수 있습니다. 예를 들어, PersonVO 클래스는 name, age, address와 같은 속성을 가지고 있으며, 이를 StudentVO, TeacherVO, EmployeeVO와 같은 자식 클래스에서 사용할 수 있습니다.
  • 부모 클래스에서 정의된 메서드도 자식 클래스에서 그대로 사용할 수 있습니다.

3. 부모 클래스의 멤버 상속 👩‍👩‍👦

  • 자식 클래스는 부모 클래스의 모든 멤버 (변수, 메서드)를 상속받지만, 부모 클래스의 생성자와 초기화 블록은 상속되지 않습니다.
  • 자식 클래스에서 부모 클래스의 멤버를 사용할 때는 super 키워드를 사용하여 부모 클래스의 메서드나 생성자에 접근할 수 있습니다.

4. 상속의 특징❗❗

  • 자식 클래스는 부모 클래스의 모든 멤버를 상속받습니다. 다만, 부모 클래스의 멤버가 private일 경우 자식 클래스에서는 접근할 수 없습니다. 이때 public 또는 protected 메서드를 통해 접근할 수 있습니다.(캡슐화의 원칙)
  • 상속은 단일 상속만 가능하며, 자식 클래스는 하나의 부모 클래스만 상속받을 수 있습니다. (자바에서는 다중 상속을 지원하지 않음)
  • 부모 클래스는 자식 클래스에 직접 접근할 수 없습니다. 부모 클래스에서 자식 클래스의 멤버에 접근하려면 메서드를 통해 접근해야 합니다.

5. 상속 관계 예시

  • PersonVO 클래스는 공통된 속성과 메서드를 제공하는 부모 클래스입니다.
  • StudentVO, TeacherVO, EmployeeVO 클래스는 PersonVO를 상속받아 각각 학생, 교사, 직원을 나타내는 자식 클래스입니다. 자식 클래스는 부모 클래스의 속성 및 메서드를 상속받고, 추가적인 속성이나 메서드를 정의할 수 있습니다.

예시

1. PersonVO 클래스 (부모 클래스)

public class PersonVO {
    private String name;
    private int age;
    private String address;

    public PersonVO() {}

    public PersonVO(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String perInfo() {
        return "name=" + name + ", age=" + age + ", address=" + address;
    }
}

2. StudentVO 클래스 (자식 클래스)

public class StudentVO extends PersonVO {
    private String stuId;

    public StudentVO() {}

    public StudentVO(String name, int age, String address, String stuId) {
        super(name, age, address); // 부모 클래스의 생성자 호출
        this.stuId = stuId;
    }

    public String getStuId() {
        return stuId;
    }

    public void setStuId(String stuId) {
        this.stuId = stuId;
    }

    public String stuInfo() {
        return super.perInfo() + ", stuId=" + stuId;
    }
}

3. TeacherVO 클래스 (자식 클래스)

public class TeacherVO extends PersonVO {
    private String subjectId;

    public TeacherVO() {}

    public TeacherVO(String name, int age, String address, String subjectId) {
        super(name, age, address); // 부모 클래스의 생성자 호출
        this.subjectId = subjectId;
    }

    public String getSubjectId() {
        return subjectId;
    }

    public void setSubjectId(String subjectId) {
        this.subjectId = subjectId;
    }

    public String teaInfo() {
        return super.perInfo() + ", subjectId=" + subjectId;
    }
}

4. Employess 클래스 (자식 클래스)

public class EmployeeVO extends PersonVO {
    private String dept;

    public EmployeeVO() {}

    public EmployeeVO(String name, int age, String address, String dept) {
        super(name, age, address); // 부모 클래스의 생성자 호출
        this.dept = dept;
    }

    public String getDept() {
        return dept;
    }

    public void setDept(String dept) {
        this.dept = dept;
    }

    public String empInfo() {
        return super.perInfo() + ", dept=" + dept;
    }
}

5. OOPApp (메인 클래스)

public class OOPApp {
    public static void main(String[] args) {
        StudentVO stu01 = new StudentVO("섭섭이", 20, "서울", "2000");
        System.out.println(stu01.stuInfo());

        TeacherVO tea01 = new TeacherVO("섭섭이", 20, "서울", "JAVA");
        System.out.println(tea01.teaInfo());

        EmployeeVO emp01 = new EmployeeVO("박성빈", 20, "서울", "교육팀");
        System.out.println(emp01.empInfo());
    }
}


상속의 요약 💬

  • 상속은 부모 클래스의 속성과 메서드를 자식 클래스가 물려받는 개념입니다.
  • 자식 클래스는 부모 클래스의 멤버를 재사용하고, 자신만의 특성을 추가할 수 있습니다.
  • 상속을 통해 코드의 중복을 줄이고, 유지보수성을 높일 수 있습니다.
  • 자식 클래스는 부모 클래스의 멤버를 super 키워드를 사용하여 접근할 수 있습니다.
profile
풀스택 개발자로서의 도전을 하는 중입니다. 많은 응원 부탁드립니다!!😁

0개의 댓글