코드스테이츠_국비교육/[Section1]

20_기술 면접 연습, 미니 잡 서칭_22.09.19

생각없이 해도 생각보다 좋다. 2022. 9. 19. 13:55

기술 면접 연습

>진행

: 원하는 질문을 3개 골라 답변을 준비하여 기술 면접 연습에 임했다.

: 각각의 질문이 답변 혹은 질문 주제에 대한 추가적인 질문을 예상하며 준비했다.

>느낀점

: 준비하면서 생각보다 내가 더 대충 기억하고 있다는 것을 깨달았다. (메타인지...)

: 나름 그때 그때 회고하면서 잘 정리했다고 생각했는데, 오늘 면접을 준비하면서 더 알게된 경우가 많았다.

: 한 번에 완벽히 정리는 못한다고 생각하고, 후에 다시 공부하고 그때그때 추가되는 정보와 이해를 더 기록하자.

// 아래 단 질문은 지금 보기도 힘겨운데 나중에 보면 많이 역할 것 같다...참고 그때 수정해보도록 하자.


미니 잡 서칭_책 읽기

>회고

: 코드스테이츠의 세심함에 다시 한 번 놀란다. 이따금 구성된 프로그램을 보면서 세심하게 교육생을 케어하려는 것을 느끼곤 했는데, 매번 이럴 때마다 약간 감동받는다.

취지도 너무 좋고, 해당 목적이 아니더라도 책을 읽는 것을 굳이 굳이 외면했던 내게 다시 한 번 동기 부여를 주는 느낌이라 더 좋았다.

꼭 계획대로 책을 읽고 과제를 완수하고, 이걸 첫 걸음삼아 다양한 책을 접해봐야겠다.

>계획

: 22.09.30 ~ 22.10.15 (총 16일)

 

 

기술 면접 연습 준비

>질문

  • Q1. 자바 데이터 타입 중 기본형과 참조형의 차이에 대해 설명해주세요.
  • Q2. 자바 객체지향 프로그래밍(OOP)에 대해 설명해주세요.
  • Q3. 제네릭에 대해서 설명하고, 컬렉션 클래스에서 왜 제네릭을 사용하는 지 설명해주세요.

>답변

A1.

기본형

: 리터럴을 저장할 수 있는 타입을 말합니다.
참조형

: 기본형이 아닌 모든 타입은 참조형 타입이며, 실제 값이 아닌, 값이 저장되어 있는 주소의 값을 저장하는 타입입니다.

A1+.

+리터럴

: 문자 그대로의 의미를 지닌 값으로, 예를 들면, 1, 2, 3은 정수, 0.1, 0.2, 0.3은 소수, 'a', 'b', 'c'는 문자, "hello"는 문자열의 의미를 지닌 값이니 이들은 모두 리터럴입니다. 그리고 리터럴은 논리 타입, 정수 타입, 실수 타입, 문자 타입, 문자열 타입으로 종류가 나뉩니다.
+주소와 주소값

: 자바를 실행할 때, 운영체제로부터 메모리 공간을 할당 받고, 변수, 클래스 등과 같은 자바의 데이터들은 제공받은 메모리 공간에 각각 저장됩니다. 그리고 이 메모리 공간에 저장될 때, 데이터의 종류에 따라 필요한 크기의 방을 만들어 저장하는데 이를 주소라고 합니다. 그리고 그 주소를 찾아가기 위한 명패를 주소값이라고 합니다.

A2.

객체지향 프로그래밍

: 객체들로 이루어진 프로그램을 만드는 것입니다.
여기서 객체란 실제로 존재한다 라는 사전적 의미를 가진 단어이며, 눈에보이는 사물따위의 유형적인 것 뿐만 아니라 논리나 개념과 같은 무형적인 것도 포함합니다.
이러한 객체를 각각의 클래스라는 코드로 구현하고, 이를 부품삼아 하나로 완성된 기계, 즉 프로그램을 만드는 것이 자바에서의 객체지향 프로그래밍을 의미합니다.

A2+

+OOP의 장점과 단점

+장점

: 많은 장점이 있겠지만, 그 중 대표적인 장점 2가지와 그 이유를 들어보겠습니다.
첫째는 객체를 코드화시키고, 이러한 객체로 이루어진 프로그램이기에 현실에 존재하는 것을 컴퓨터에 반영하기 적합하다는 장점이 있습니다.
예를 들어, 케이크를 만드는 것을 컴퓨터에 반영해보겠습니다.
우선 케이크를 만드는 것에 필요한 재료들을 변수로 지정합니다. 그리고 '무엇을 만든다'라는 행위를 클래스로 구현합니다. 이렇게 표현된 클래스를 상속받아 '빵을 만든다'라는 클래스를 만들고, 또 이를 상속받아 '케이크를 만든다'라는 클래스를 만들 수 있습니다. 최종적으로 이러한 객체들을 합쳐서 케이크에 필요한 재료들을 통해 케이크를 만든다 라는 프로그램을 만들 수 있습니다. 이처럼 객체지향 프로그래밍은 유형적인 것과 무형적인 것을 표현할 수 있기 때문에 현실을 반영하기 적합합니다.

둘째는 코드를 재활용하기 좋다는 장점이 있습니다. 앞서 예시에서는 '무엇을 만든다' 라는 클래스를 '케이크를 만든다'라는 클래스에 적용습니다. 하지만 '무엇을 만들다'를 다른 것, 예를 들면 '컴퓨터를 만든다'라는 것으로 적용시킨다면, 컴퓨터를 만드는 프로그램에 사용할 수 있습니다. 이처럼 완성되어 있는 코드를 다른 방향으로도 사용할 수 있기 때문에 다양한 목적에 맞는 프로그래밍을 하기에 적합합니다.

+단점

: 단점도 대표적인 두 가지를 들겠습니다.
첫째는 절차적 프로그래밍 방식에 비해 상대적으로 실행 속도가 느리다는 점입니다.
절차적 프로그래밍은 작성된 코드를 순차적으로 쭉 진행하지만, 객체지향 프로그래밍은 객체를 나눔으로써 구조적으로 참조해야할 공간이 많아 속도가 상대적으로 느립니다.
둘째는 필요한 메모리양 상대적으로 많다는 점입니다. 
조금의 메모리가 사용되는 기능조차도 객체로 나눔으로써 객체가 가지는 초기 메모리 용량을 차지하게 됩니다. 때문에 메모리양이 상대적으로 많아질 수 있습니다.

A3.

제네릭

: 타입을 구체적으로 지정하지 않고, 추후에 지정할 수 있도록 일반화해두는 것을 의미합니다.

구체적으로 타입을 지정하지 않기 위해서 타입 파라미터를 사용하고, 타입을 지정하는 시점은 해당 제네릭을 사용할 때입니다. 예를 들면, 제네릭 클래스는 인스턴스를 생성할 때 타입을 지정하고, 제네릭 메소드는 메소드를 호출할 때 타입을 지정합니다.

컬렉션 클래스에서 제네릭을 사용하는 이유

: 컬렉션 클래스에서 제네릭을 사용하는 이유는 컬렉션 클래스가 컬렉션 인터페이스를 구현하는 클래스이기 때문입니다. 
컬렉션 인터페이스는 사용자가 데이터를 정리하는 것에 편의를 제공하기 위한 도구이며, 사용자가 어떤 데이터를 다룰지 모르기에 제네릭을 사용합니다. 때문에 이를 구현한 컬렉션 클래스도 자연스럽게 제네릭을 사용해야 합니다. 추가로, 컬렉션 클래스의 제네릭 클래스이기 때문에 타입이 지정되는 시기는 컬렉션 클래스의 인스턴스가 생성될 때 입니다.

A3+.

+타입 파라미터

: 제네릭에 사용되는 파라미터로 타입을 지정해두지 않을 곳을 표현할 때 사용합니다. 문법적으로는 꺽쇠<>로 파라미터명을 감싸서 표현하며, 파라미터명은 자유롭게 지정할 수 있지만, 관례적으로 의미있는 단어의 첫 문자를 따서 대문자로 이름을 짓습니다.

+컬렉션 인터페이스 종류

: List, Set, Map

+컬렉션 클래스 종류
: List
1. ArrayList
2. LinkedLsit
: Set
1. HashSet
2. TreeSet
: Map
1. HashMap

'코드스테이츠_국비교육 > [Section1]' 카테고리의 다른 글

20_[Section 1] 회고_22.09.19  (0) 2022.09.19
19.01_스레드_22.09.16  (0) 2022.09.17
18.06_파일 입출력_22.09.15  (0) 2022.09.17
18.05_애너테이션_22.09.15  (0) 2022.09.17
18.04_메서드 레퍼런스_22.09.15  (0) 2022.09.17