Intro

  • 어떤 책을 보면 완벽하게 면접에서 강점을 가질 수 있을까?
    이런 고민을 매번 했다. 조건은 다음과 같아야 할 것이다.
  1. CS가 정리되어 있고 이를 조리 있게 설명해 주는 책.
  2. Java, Spring의 기본적인 내용이 담겨 있는 책.
  3. 인성 면접의 경우의 수를 잘 나누고 개발자의 답변이 정리된 책.
  4. 개발자의 코딩 테스트에 관해 준비하고 이를 향상 시켜줄 수 있는 책.

이러한 정리가 이루어진 책 한 권이 있다. 이 책을 조금씩 정리하고,
조금 더 나의 언어로 정리해 기록하고 쌓아가며 나를 성장시키고, 다른 개발자들에게 도움이 될 수 있기를 바라는 마음에서 해당 북스터디를 스스로 진행하기로 했다.

더 좋은 개발자가 될 수 있고 더 나은 개발자가 되고 싶은 분들 중 길을 잘 못 찾고 있는 분들이 계시다면 위의 4가지를 다루고 있는 이 책이 큰 도움이 될 수 있을 것이라 생각한다.

이 책의 챕터 6부터 시작해서 책들을 학습하고 어떻게 책을 재구성할지를 고민하고 블로그에 게시할 예정이다. 매일 2시간 이상씩 학습하고, 이 책은 면접을 준비하는 책이기 때문에
단순한 학습 뿐만 아니라, 읽으면서 스스로 발전해 갈 수 있으면 좋겠다.

그리고 자신의 언어로 바꾸는 게 필요하다.

가령, github에 나와 있는 오버라이딩, 오버로딩에 관한 정리는 아래와 같다.

오버라이딩 vs 오버로딩

오버라이딩과 오버로딩은 자주 나오면서도 중요한 개념이다. 하지만, 그만큼 잘 까먹기 때문에 정리하고 넘어가려 한다.

  • 오버라이딩 : 상위 클래스가 가지고 있는 메소드를 하위 클래스에서 재정의해서 사용하는 것을 의미한다.
    • 상속 시, 상위 클래스의 private 멤버를 제외한 모든 멤버를 상속받는다.
  • 오버로딩 : 같은 이름의 메소드를 여러 개 가지면서 매개변수의 타입과 개수를 다르게 하여 정의하는 것을 의미한다. 즉, 메소드의 시그니처를 다르게 하여 정의하는 것이다.
구분오버로딩오버라이딩
메소드 이름동일동일
매개변수, 타입다름동일
반환 타입상관 없음동일

(출처 : Ready-For-Tech-Interview)

좋은 정리라고 생각한다.
하지만
소개하고자 하는 책에서는 오버라이딩과 오버로딩에 관해 위 보다 더욱 상세하게 기술한다.
또한 대화형식으로 기술할 수 있게 한다. 또한 차이를 구분할 수 있게 한다.

6.1.6 다형성이란 무엇인가?

필수개념.

  • 다형성은 객체지향 프로그래밍의 핵심 개념 중 하나입니다.
  • 다형성을 뜻하는 ‘polymorphism’이라는 단어는 그리스어로 ‘많은 형태’를 의미합니다.
  • 다형성은 때에 따라 객체가 다르게 동작할 수 있도록 합니다.
  • 다형성은(컴파일 타임 다형성이라고 하는)메서드 오버로딩이 있습니다.
  • 다형성은 IS-A관계의 경우(런타임 다형성이라고 하는) 메서드 오버라이딩도 있습니다.

실제 답변은 아래와 같은 틀로

다형성은 객체지향 프로그래밍의 핵심 개념 중 하나입니다. 다형성을 뜻하는 ‘polymor-phism’은 ‘많다’를 의미하는 ‘poly’와 ‘형태’를 의미하는 ‘morph’라는 2개의 그리스어로 구성된 단어입니다. 즉 다형성은 많은 형태를 의미합니다.

좀 더 정확하게 말해, 객체지향 프로그래밍에서 다형성은 객체가 때에 따라 다르게 동작 할 수 있게 해주거나 어떤 동작이 다른 방법으로 동작할 수 있도록 하는 역할을 합니다. 다형성을 구현하는 방법 중 하나는 메서드 오버로딩입니다. 여러 개의 메서드가 동일한 이름을 가지고 있지만 매개변수가 다른 경ㅇ우 컴파일러가 오버로드된 메서드 가운데 어떤 형식을 호출할 것인지 컴파일 시간에 식별할 수 있으므로 컴파일 타임 다형성이라고도 합니다. 이때 오버로드된 메서드의 형태에 따라 객체는 다르게 동작합니다. 예를 들어 Triangle(삼각형)이라는 클래스에는 서로 다른 매개벼수를 가진 여러 개의 draw 메서드를 정의할 수 있습니다. 다형성을 구현하는 또 다른 방법은 메서드 오버라이딩입니다. 메서드 오버라이등은 IS-A 관계가 잇을 때 일반적으로 사용하는 방법이며, 런타임 다형성 또는 동적 메서드 디스패치라고 합니다. 보통 여러 가지 메서드를 포함하는 인터페이스 구현으로 시작하며, 각 클래스는 특화된 동작을 수행하기 위해 인터페이스에 있는 메서드를 오버라이드 합니다. 이때 다형성이 타입에 대한 혼란 없이 이 클래스들을 부모 인터페이스와 똑같이 사용할 수 있게 합니다. 런타임에 자바가 이러한 클래스를 구별할 수 있고 어느 클래스가 사용되는지 알고 잇기 때문에 가능한 일입니다. 예를 들어 draw 메서드를 가지는 Shape(모양 이라는 인터페이스가 있다고 할 때, Triabngle,Rectangle(직사각형),Circle(원) 클래스가 Shape 인터페이스 구현에 있는 draw 메서드를 오버라이드해서 각 도형에 해당하는 모양을 그릴 수 있습니다.

위 정도의 형태가 단순히 다형성을 통해 메서드 오버로딩, 오버라이딩을 설명할 수 있는 상태를 기술한 것으로 차이에 관해서는 더 상세하게 나중에 더 많은 것을 보며 이야기 해 보자.

지면을 통해 보여지지면, 말을 하는 것은 살이 붙고, 거기에는 지식과 적절한 예시가 필요하다.

우리가 기본서 또는 교수님, 강사님들이 자주 들던 예시들이 이제는 실력을 쌓은 우리의 머릿 속에서 우리의 입에서 나올 수 있게 숙련시키고 연습하는 방식이 담겨 있는 책이다.

이 책은 초보에게는 중급과 고급으로 나아갈 수 있는 좋은 토대가 되며
중급과 고급인 사람에게는 핵심을 잘 정리하고 복습하기 좋은 교본이라고 생각하기에 이 책은 앞으로도 계속 나와 함께 하며 성장할 수 있는 책이라고 생각한다.

여러 CS책을 보고, 면접 서적을 뒤적이며 이 책 한 권을 통해 나의 교본을 쌓고 더 많은 개념들을 축적하고 향상시킬 수 있게 해야겠다.

해당 서적에서도 GOF에 대해서는 별도의 서적을 활용할 것을 권할 만큼 그 내용이 방대하다. 집중과 선택을 한 것으로 보인다. 나는 해당 내용까지 섭렵해 더 좋은 개발자가 되도록 해야겠다.

profile
하루 하루 즐겁게

0개의 댓글