문득 Java 공부를 하다가 객체지향프로그래밍 부분에 객체의 멤버요소 중 메서드를 공부하던 중이었다. 기존에 책을 2번정도 완독했었는데, 그때마다 5~10번 아니 계속 반복해서 완전히 익혀야한다는 말을 많이 들었다. 특히 객체지향에 대해서는 정말 계속 보고 또 봐야한다고 했다. 이 부분에 대해서 오늘 느껴지는게 있었던 것 같다.
현재 보고 있는 부분에서는 메서드를 선언하는 부분과 호출하는 부분에 대해서 나와있다. 그 중 내가 기존에 알고있던 부분에서 조금 더 깊어졌다고 해야하나? 그런 느낌을 받은 부분이 있었다. 바로 호출하는 쪽(클라이언트)에서 인자로 호출되는 쪽(서버) 매개변수에 값을 넘길 때 매개변수와 타입이 같거나 자동형변환이 가능해야하며, 호출을 마칠 때는 메서드에 정의한 반환타입과 타입이 맞거나 자동형변환이 가능해야 한다는 내용이다.
이 부분이 단순 기본형이나 배열 등 직감적으로 알 수 있는 부분이라면 크게 어렵지는 않을 것이다.
그러나 객체지향에서는 상속, 인터페이스,다형성 같은 확장에 용이하고 유연한 설계가 가능하도록 하는 부분들이 있다. 이 부분들까지 고려했을 때 오늘 메서드 부분에 대해서 생각하고 느꼈던 자동형변환 부분이 추후 인터페이스나 다형성등을 이해하는데 좋은 소스가 될 것이라 생각되서 오늘 느낀 이 느낌을 남겨놓고자 한다.
대략 아래와 같은 경우들을 한번 생각해봤다. 이런식으로 매개변수나 반환타입에 대한 자동형변환을 생각해봤을 때, 추후 이런 부분들에 대해서 개념을 제대로 잡고 있지 않다면 큰 어려움이 될 것이라 생각이 들었다.
class Parent{
String name;
}
class Child extends Parent{
int age;
}
class Local{
// 1.) 매개변수 : 부모타입 / 반환 : 부모타입
/*
public Parent live(Parent parent){
Child c = new Child();
return c;
}
2.) 매개변수 : 부모타입 / 반환 : 자식타입
public Child live(Parent parent){
Child c = new Child();
return c;
}
3.) 매개변수 : 자식타입 / 반환 : 부모타입
public Parent live(Child parent){
Child c = new Child();
return c;
}
3.) 매개변수 : 자식타입 / 반환 : 자식타입
public Child live(Child parent){
Child c = new Child();
return c;
}
*/
}
class TestMain{
public static void main(String[] args) {
Local local = new Local();
Parent parent = new Parent();
Child child = new Child();
// local.live(parent); 2.)의 경우 매개변수타입이 자식이기에 부모타입을 넘길 수 없다.
local.live(child);
// child = local(child); 1.) 부모타입으로 반환되기에 자식타입 참조변수로 받을 수 없다.
}
}
'TIL & WIL > TIL' 카테고리의 다른 글
[String 클래스] replace() , replaceAll(), replaceFirst() (0) | 2023.01.25 |
---|---|
형변환이 가능한 Overloading (0) | 2023.01.23 |
Githup 커밋 강제 되돌리기 (0) | 2023.01.18 |
error: invalid source release: 17 (0) | 2023.01.15 |
Permission denied (publickey,gssapi-keyex,gssapi-with-mic) (0) | 2023.01.13 |