3줄요약
- 제네릭은 타입을 임의로 지정하는 기능이다. 암기 : class myClass<T>{}
- 람다는 추론가능한 코드를 줄여주기 위한 코딩기법이다. (x)->{...}
- 예외처리는 에러가 발생하기 직전에 예외를 발생시켜 코드를 보호하는 코딩기법이다.
- (추가) 어노테이션은 @으로 시작하고, 컴파일러와 소통하기 위한 코딩기법이다.
다형성이라는 것은 작은거에 큰걸 담는 기술이예요.
이 문장을 이해하면 다형성을 이해했다고 할 수 있어요.
일단 말을 쪼게 볼께요. 다형성, 형태가 많은 성질. 영어로는
polymorphism, 그리스 어원인 많은(poly)와 매칭된다는 수학용어(morphism)의 합성어예요.
즉, 여러형질이 어디론가 매칭된다는건데, 매칭을 논하기 이전에 질문 하나만 할께요.
세상의 모든 정보를 컴퓨터에 담을 수 있을까요?
디지털 세대에게는 당연해 보이겠지만, 막상 내용을 들여다보면 쉽지 않아요.
왜냐하면, 컴퓨터는 0과 1밖에 저장 할 수 없기 때문이죠.
0과 1로 표현 할 수 있는 것은 기껏해봐야 숫자밖에 없잖아요?
하지만 이 숫자들을 조합하면, 직육면체도 삼각뿔도 표현 할 수 있고요, 날짜도, 색상도 표현할 수 있어요.
즉, 숫자들을 어떤 순서대로 조합하느냐에 따라서, 사람도, 자동차도, 지구도 될 수 있다는 게 핵심인거죠.
이런 구현체를 컴퓨터 용어로 객체라고 불러요.
문제는 이런 형태들이 온 지구상에 넘쳐난다는거예요.
즉, 우리의 통제를 벗어난다는 거죠.
그래서 우리의 선배들은 하나의 아이디어를 냈어요.
복잡한 것은 간단한 것들의 조합으로, 점점 더 복잡한것도 쉽게 만들어 낸다는 거죠.
컴퓨터 용어로는 상속이라고 하고요. 상속을 통해서 구조화하겠다는 것. 객체 지향의 핵심이죠.
그래서 상속을 받는 객체는 늘 상위 개념보다 더 커지게 되요. 더 많은 정보를 담게 되고, 더 많은 기능을 하게되죠.
똑같은 기능이라면 굳이 상속 받을 이유도 없겠죠? 기억하세요. 자식이 부모보다 언제나 더 크다.
하지만, 아직 근본적인 문제는 해결되지 않았어요. 우리가 만들 수 있는 객체는 무궁무진하다는 점이죠. 앞으로도 계속 늘어날 거예요.
사실 객체가 많아진다는 것이 문제가 된다기 보다, 객체가 파생 될 때마다 기존의 객체와 호환성을 고려해야한다는 점이 부담이 되요.
다형성이란 것은 이점을 크게 보완해줘요.
부모가 A라는 기능이 있으면, 자식이 와서 A라는 기능을 수행해도 별 문제가 없다는 컨셉이죠.
심지어는 A기능만 가지고 있다면, 32대손이 와서 A를 수행하나, 54대손이 와서 A를 수행하나 상관이 없다는 거죠.
실생활과 똑같죠?
여러분이 물건을 살 때, 물건의 품질이 중요하지 누가 만들었는지는 중요하지 않잖아요. 잘 만 동작하면 되는거지.
경찰도 똑같죠? 도둑만 잘 잡으면 되는거지, 경찰이 여자인지 남자인지는 중요하지 않잖아요.
그런데 반대는 성립하지 않아요.
3가지 능력을 필요로 하는 회사에 10가지 능력을 갖고 입사하는 것은 문제가 안되지만,
1가지 능력밖에 수행할 수 없는 사람은 적합하지 않죠.
최소한의 능력을 가지지 못한건 문제가 되지만, 그 이상을 가지고 있다면, 어떤 형태든 상관이 없는거죠.
이것이 다형성의 핵심입니다.
이해가 가시나요?
면접 시 다형성이 뭔지 물어본다면 길게 설명하실껀가요?
작은거에 큰걸 담는 기술입니다. 이 한마디면 충분합니다. 면접관이 못알아 듣는다고요?
class B extends A{}; A a = new B(); 이 한 줄 적어줍시다.
끝!
아직 들으시는 분들을 위한 팁! 그게 어떻게 가능한거냐?
클래스는 변수와 함수가 합쳐진 것입니다. 변수는 내 위치로 부터 얼마만큼 떨어져있는 영역이고,
함수는 내 위치로 부터 얼마만큼 떨어져 있는 실행코드입니다.
상속을 받으면, 기존의 기능이 숨겨지기는 해도 사라지지는 않아요. 즉 구조는 가지고 간다는 거죠.
(동적이 될 수도 있지만) 기본적으로 내 위치로 부터 참조 영역까지에 해당한 영역이 활성화만 되어있다면, 오케이인 겁니다.
그것보다 넘쳐서 기록한 것은 무시하면 되는 거죠.
생각보단 구현이 상당히 간단하죠? 진짜 끝
댓글