객체지향은 코드의 재사용성과 확장성을 높이고, 유지보수를 쉽게 하는 등의 장점이 있습니다. 여기서는 객체지향의 주요 개념과 특징에 대해 설명하겠습니다.
객체지향에서는 클래스, 객체, 상속, 다형성, 캡슐화(은닉화), 추상화가 있습니다.
이 글에서는 클래스, 객체, 상속까지 하고 나머지는 다음 글에 작성하겠습니다!!
객체를 생성하기 위한 설계도 또는 템플릿입니다. 클래스는 객체의 속성(필드)과 메서드(기능)를 정의합니다. 예를 들어, 자동차라는 클래스를 정의하면, 이 클래스에는 자동차의 속성(모델, 색상 등)과 기능(운전, 멈춤 등)을 포함할 수 있습니다.
클래스를 기반으로 생성된 실제 인스턴스입니다. 객체는 클래스에서 정의된 속성과 메서드를 가집니다. 예를 들어, 자동차 클래스에서 파란색 제네시스라는 객체를 생성할 수 있습니다. 이 객체는 자동차 클래스에서 정의된 속성과 기능을 갖게 됩니다.
부모 클래스의 속성과 메서드를 자식 클래스가 물려받는 개념입니다. 상속을 통해 코드의 중복을 줄이고, 기능을 확장할 수 있습니다.
extends 키워드를 사용하여 부모 클래스를 상속받습니다.StrudentVO 클래스는 PersionVO 클래스를 상속받습니다.public class StudentVO extends PersonVO {
// 자식 클래스의 특성 (추가적인 멤버변수 및 메서드)
} PersonVO 클래스는 name, age, address와 같은 속성을 가지고 있으며, 이를 StudentVO, TeacherVO, EmployeeVO와 같은 자식 클래스에서 사용할 수 있습니다.super 키워드를 사용하여 부모 클래스의 메서드나 생성자에 접근할 수 있습니다.private일 경우 자식 클래스에서는 접근할 수 없습니다. 이때 public 또는 protected 메서드를 통해 접근할 수 있습니다.(캡슐화의 원칙)PersonVO 클래스는 공통된 속성과 메서드를 제공하는 부모 클래스입니다.StudentVO, TeacherVO, EmployeeVO 클래스는 PersonVO를 상속받아 각각 학생, 교사, 직원을 나타내는 자식 클래스입니다. 자식 클래스는 부모 클래스의 속성 및 메서드를 상속받고, 추가적인 속성이나 메서드를 정의할 수 있습니다.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;
}
}
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;
}
}
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;
}
}
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;
}
}
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());
}
}