스프링 입문을 위한 자바 객체지향의 원리와 이해를 읽다
개발자라면 꼭 알고있어야 하는 객체지향에대해 기록하면 좋을것 같아 글을 작성하게 되었습니다.
우선 객체지향의 4가지 특징은 아래와 같습니다.
- 캡슐화 : 정보 은닉
- 상속 : 재사용 + 확장
- 추상화 : 모델링, 클래스 설계
- 다형성 : 사용편의성
책에서는 위 4가지 특성을 아래와 같이 표현하고 있습니다.
캡! 상추다
오늘은 이 4가지 특성을 조금 더 자세히 알아보겠습니다.
추상화
객체지향의 추상화는 곧 모델링이다.
이 글을 읽자마자 알고는 있었지만 설명하기에 복잡하고 불안하게 알고있던 추상화라는 개념을
정말 잘 표현했다고 생각이 들었습니다.
우리는 객체를 활용해서 프로그래밍을 합니다.
그 객체를 사용하려면 클래스가 필요합니다.
그리고 클래스는 객체의 모델링을 한것입니다.
자연스럽게 사용하고 있는 클래스의 개념이 추상화인 것입니다.
// 클래스 : 추상화 : 모델링
public class 사람 {
String name
int age;
}
// 객체화
사람 홍길동 = new 사람();
그리고 프로그래머는 각 객체마다 재조합하여 잘 사용하여야 합니다.
너무 복잡하게 생각할 필요도 없는것 같습니다.
상속
재사용과 확장
하위 클래스는 상위 클래스다.
객체지향의 장점중 하나는 상속을 통해 재사용과 확장을 할 수 있습니다.
저는 Entity의 id를 Value로 변경하면서 Entity마다 공통된 Id를 사용할 수 있도록
Identifer라는 추상클래스를 설계하였습니다.
이때 각Entity의 id는 상속받은 Identifier라는 클래스의 필드인 id를 공통으로 사용하여
상속의 편리함을 알 수 있었습니다.
여기서는 간단한 예제를 통해 확인해 보겠습니다.
동물을 상속받은 포유류와 조류는 myName을 공통으로 사용합니다.
public class 동물 {
String myName;
동물() {
myName = "동물";
}
void showMe() {
System.out.println(myName);
}
}
public class 포유류 extend 동물{
포유류() {
myName = "포유류";
}
}
public class 조류 extend 동물{
조류() {
myName = "조류";
}
}
포유류와 조류를 상속받은 고래와 박쥐도 myName을 재정의하여 재사용 하였습니다.
public class 고래 extend 포유류{
고래() {
myName = "고래";
}
}
public class 박쥐 extend 조류{
박쥐() {
myName = "박쥐";
}
}
이제 main에서 호출해 보겠습니다.
showMe(),myName는 하위 클래스 객체에서 전부 재사용이 가능합니다.
동물 animal = new 동물();
포유류 mamalia = new 포유류();
조류 bird = new 조류();
고래 whale = new 고래();
박쥐 bat = new 박쥐();
animal.showMe();
mamalia.showMe();
bird.showMe();
whale.showMe();
bat.showMe();
또한 상속은 is a kind of 상위클래스를 만족해야 합니다.
김연아 is a kind of 사람
고래 is a kind of 동물
조류 is a kind of 동물
상속의 핵심
- 상위 클래스의 특성을 재사용
- 상위 클래스의 특성을 확장
- is a kind of 관계를 만족
- 상위클래스의 생성자가 먼저 실행
- 다중상속 X
인터페이스와의 차이
상속 : 속성, 행동을 재사용
인터페이스 : 행동을 재정의
다형성
가장 기본은 오버라이딩과 오버로딩이라고 할 수 있습니다.
Override : 같은 이름, 같은 인자목록으로 메서드를 재정의
Overloading : 다른 인자 목록으로 다수의 메서드를 중복 정의
사실 다형성은 클래스 관계, 인터페이스와 구혀 클래스 사에에도 말할 수 있지만
책에서는 Override,Overloading만 다뤄서 이글에서도 두가지만 다룰 것입니다.
캡슐화
접근 제어자는 캡슐화의 핵심입니다.
public : 모두 접근가능
protected : 상속/ 같은 패키지 내의 클래스에서 접근 가능
default : 같은 패키지 내의 클래스에서 접근 가능
private : 본인만 접근 가능
접근제어자를 사용해 객체의 정보를 은닉할 수 있습니다.
느낀점
객체지향의 4가지 특성을 대충알고있고 정확하게 설명하지 못하였는데
이번기회에 정확히 알게되는 시간이였습니다.
기본이 튼튼해야 나중에 무너지지 않는다는것을 알기때문에 작은 개념이라도 확실히 알고 넘어가겠습니다.
특히 객체지향에 관한 내용들은 확실히 알아둬야 겠습니다!
'Spring' 카테고리의 다른 글
디자인 패턴 (1) | 2023.09.22 |
---|---|
객체지향 설계 원칙 - SOLID (0) | 2023.09.20 |
Bean 등록 방법 (0) | 2023.08.19 |
의존성 주입 방법 (0) | 2023.08.19 |
JSP - Request, Response 객체 (0) | 2023.07.28 |