(미완성 글입니다.)
자바를 공부하면 기본적인 코드를 작성하는 법을 배우고 난 뒤에 학습하게 되는 것이 객체지향이다.
객체지향을 공부하면서 가장 중요한 4가지 키워드 (캡슐화, 상속, 추상화, 다형성 )를 당연하게 학습하게 된다. 그리고 자연스럽게 예제코드를 따라치면서, 그 개념을 이해한다.
나의 경우로는 처음에는 이 개념에 대해서 이해를 잘 하지 못했고, 머리 속에서 붕붕 떠있는 기분이 들었다.
또한, 객체지향을 활용했을 때의 장점들을 이론으로만 알고있을 뿐, '그래서 어떤 상황에서 사용해야하고, 그 상황에서 사용하면 왜 좋다는 거야?' 라는 의문을 품고 있었다.
그렇게 돌고돌아 아직도 얕은 이해겠지만, 개념들이 내 머리 속에서 자리잡기 시작한 것 같아서 키워드마다 정리를 시작해보려고 한다.
그리고 이해가 깊어질수록 이 글을 계속 수정해나가려고 한다.
키워드의 순서는 추후에 수정을 할 예정이다.
스프링 입문을 위한 자바 객체지향의 원리와 이해를 참고하였습니다.
inheritance이다.extends 예약어를 사용한다.코드의 재사용 과 다형성을 통한 코드의 유연성이다.코드의 재사용을 목적으로 하는 상속은 금한다.is a 관계인지 확인한다.is a kind of로 대입하여 확인하는 것이 더 좋다. Ex) 포유류는 동물의 한 분류이다. 조상과 자손으로 설명하는 상속이라면? Ex) 아들 extends 아버지 -> 아들은 아버지이다.(???)
그래서 상속을 확장으로 이해하는 것이 좋다.
package polymorphism;
public class Animal {
public String name;
public void showName() {
System.out.printf("내이름은 %s",name);
}
}
package polymorphism;
public class Penguin extends Animal{
public String habitat;
public void showHabitat() {
System.out.printf("나는 %s에 살아\n",habitat);
}
@Override
public void showName() {
System.out.println("안알랴줌ㅎㅎ");
}
//오버로딩
public void showName(String name) {
System.out.printf("%s 안녕, 내이름은 %s야\n",name,this.name);
}
}
package polymorphism;
public class Main {
public static void main(String[] args) {
Penguin pororo = new Penguin();
pororo.name = "뽀로로";
pororo.habitat = "남극";
Animal pingu = new Penguin();
pingu.name= "핑구";
pororo.showName(); //안알랴줌ㅎㅎ
pororo.showHabitat(); //나는 남극에 살아
pororo.showName(pingu.name); //핑구 안녕, 내이름은 뽀로로야
pingu.showName(); //안알랴줌ㅎㅎ
}
}