본문 바로가기

diary/codestates (be39)

05/23/22 daily 회고) 기술 면접 준비 + 개발 관련 도서 선정

🐑

1. 기술 면접 대비

오늘은 Section 마지막 날으로 그동안 학습한 내용을 바탕으로 기술 면접에 대비해보는 시간을 가졌다. 여러가지 문항이 주어지고 선택해서 준비할 수 있었는데, 가장 생소하고 모른다고 생각하는 내용을 골랐다가 지금까지 고통받고 있다...................

  • 이너클래스의 장점
  • 컬렉션과 스트림의 차이
  • 제네릭의 정의와 컬렉션 클래스에서 제네릭을 사용하는 이유

내가 선택한 3가지 문항인데 하나같이 쉬운 게 없었다. 공부할수록 시간은 한정되어 있다는 것을 뼈저리게 느껴서 이왕 하는 거 모르는 내용 잡고 가자! 하고 고른 건데.... 그 모르는 내용 아직도 못 잡고 있습니다. 

더보기

이너 클래스의 장점

이너 클래스란?

클래스나 인터페이스 내부에서 선언된 클래스로, 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용한다. 선언 위치에 따라 멤버, 지역, 익명 내부 클래스로 나뉠 수 있다.

선언 위치만 다를 뿐, 일반적인 클래스와 같은 방식으로 사용한다.

  • 멤버 내부 클래스
    • 외부 클래스의 멤버 변수 선언 위치에 선언한다
    • 사용 가능한 변수: 외부 전역 변수 (+인스턴스 내부 클래스의 경우: +외부 인스턴스 변수까지)
  • 지역 내부 클래스
    • 외부 클래스의 메서드나 초기화 블록 안에 선언된다
    • 외부 인스턴스 변수, 외부 전역 변수
  • 익명 내부 클래스
    • 클래스의 선언과 객체의 생성을 동시에 하는 일회용 클래스
    • 외부 인스턴스 변수, 외부 전역 변수

이너 클래스의 장점?

  • 코드를 간결하고, 읽기 쉽게 만든다
  • 외부 클래스의 private로 선언된 필드나 메서드에 접근 가능하다 → ??
  • 코드 모듈이 최적화된다.

이너 클래스의 장점2

  • 주어진 코드에서 더 많은 캡슐화를 적용할 수 있다
    • 캡슐화: 특정 객체 안에 관련된 속성과 기능을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하려는 것
    • 클래스 안에서 클래스를 선언하는, 내부 클래스는 외부 클래스의 모든 private 멤버들에 접근이 가능하므로 외부로부터 데이터를 보호할 수 있음
  • 내부 클래스는 외부 클래스에서만 사용할 수 있다
    • 외부 클래스의 모든 멤버에 대한 접근이 가능하다
  • 가독성이 좋고, 유지가 용이한 코드를 만들 수 있다
    • 외부 클래스나 인터페이스와 한곳에서 작성되기 때문에
  • Easy access, as the inner object, is implicitly available inside an outer Code optimization requires less code to write. It can avoid having a separate class. < ??

→ 전체적으로, 코드를 작성할 때 기존보다 더 많은 캡슐화를 적용할 수 있기 때문에 이너 클래스를 사용한다.


컬렉션과 스트림의 차이

컬렉션이란?

컬렉션은 데이터를 저장하기 위해 만든 것으로, 객체들을 효율적으로 추가, 삭제 , 검색할 수 있도록 만든 자료구조이다.

스트림이란?

배열이나 컬렉션의 요소를 하나씩 참조해 람다식으로 이용할 수 있게 해주는 반복자로, 복잡한 데이터 처리를 수행한다.

컬렉션과 스트림

즉, 컬렉션은 주로 데이터에 관한 것이라면 스트림은 데이터 처리에 관한 것이라고 할 수 있다. 컬렉션과 스트림 모두 순차적으로 요소에 접근하는 자료구조 인터페이스를 제공한다.

  • 데이터의 수정
    • 컬렉션: add()나 remove() 메서드를 이용해 가능
    • 스트림: 스트림은 요소를 사용해 중간 처리와 최종 처리만 수행할 뿐 데이터를 추가하거나 삭제할 수 없다
  • 반복자의 사용 방법
    • 컬렉션: for문이나 iterator로 사용해 모든 요소를 순회하는 외부 반복자를 사용한다
    • 스트림: 컬렉션 내부에서 요소들을 반복시키는 내부 반복자(for Each나 peek)의 사용으로 내부 반복자를 사용한다.
  • 생성
    • 컬렉션: 모든 요소가 시작할 때 계산된다
    • 스트림: 중간 처리 작업은 최종 처리 작업이 호출될 때까지 계산되지 않는다. 지연처리
  • 소모성
    • 스트림: 스트림을 한번 순회하면 탐색된 스트림의 요소는 소비되어 다시 사용할 수 없다. 다시 순회하기 위해서는 스트림을 다시 선언해 주어야 함
    • 컬렉션: 소모되지 않음. 다시 만들지 않고 처음 생성된 컬렉션으로 여러번 순회가 가능하다.

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

제네릭이란

클래스 내부에서 사용할 데이터 타입을 외부에서 파라미터 형태로 지정해 데이터 타입을 일반화한 것

특정 타입을 미리 지정해주는 것이 아니라, 필요에 의해 지정할 수 있도록 하는 타입

제네릭의 장점

  • 잘못된 타입이 들어오는 것을 컴파일 단계에서 방지할 수 있다. → 의도하지 않은 타입의 작성을 막음 타입 안전성
  • 클래스 외부에서 타입을 지정하므로, 타입 체크와 변환의 필요가 없다. → 관리하기 편함
  • 코드의 재사용성이 높아진다

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

제네릭의 추가 자체가 컬렉션 프레임워크의 전체 사용 방법을 변경하게 했음

모든 컬렉션은 제네릭 타입을 사용하며, 컬렉션에서 작동하는 많은 메서드 역시 제네릭 형식의 매개 변수를 사용한다.

제네릭은 필요에 의해 타입을 지정할 수 있게 하므로 타입 안전성을 추가했다.

제네릭 사용 이전에는 컬렉션은 모든 유형의 객체를 저장할 수 있었다. 즉, 컬렉션에 호환되지 않는 타입이 지정되는 게 가능했다. 이 경우 타입이 호환되지 않으므로 런타임 에러가 발생한다.

하지만 제네릭을 사용할 경우, 저장 중인 데이터 유형을 명시적으로 표기할 수 있어 타입 유형 불일치 에러를 피할 수 있다.


준비 시간으로 주어졌던 1시간 30분 동안 정리하려고 노력한 내용인데 아무리 봐도 허술하고 시간 내에 내용 채우기에 급급해서 막상 내가 흡수한 건 절반도 안 되지 싶다 💧💧💧

그래도 어떻게 해보겠다고 페어분과 모의 면접을 진행했는데 역시 잘 못했다. ㅎㅎㅠ 안 그래도 말을 잘 못하는 편인데 확실하게 알지 못하는 내용을 골랐으니 당연한 결과긴 하다. 영상 녹화까지 뜨는 게 이번 페어 활동이었는데 아.... 아무래도 모니터링은 못하지 싶다. 너무 민망해서. 적어도 당장은.  일단은 공부 열심히 더 해보겠습니다. ㅠㅠ

 

아무튼 그래서 저녁 동안 보완해서 다시 작성해보고 있는데 아무래도 제대로 잡아놓지 못한 개념이라 자료를 보면 볼수록 땅을 파는 매직에 걸려들었다. 어떡하냐 진짜......? 특히 이너 클래스 정리할 때는 아니 외부에서는 내부 클래스에 접근할 수 없다는데 교재나 자료나 다 외부에서 내부 클래스 사용하는 걸 다뤘는데 뭔 소리하나 싶어가지고 삽질..... 진짜 많이 했다. 결국 무슨 말인지 이해하고 나서는 얼마나 허탈했는지.

 

이걸로 끝이면 말도 안 한다. 제네릭 공부하는 중에는 코드 쳐보면서 이해한답시고 main 메서드 선언 안 해놓고 바로 클래스에 코드 작성해놓고서 왜 안 되냐는 말만 또 백번 했다. 십 분만 더 삽질했으면 분명 인텔리제이를 탓하면서 재설치를 했을지도 모른다. 

 

아무튼 여러모로 순탄하지 못한 하루다. 그래도 이너 클래스에 대한 내용은 나름대로 정리를 완료했고, 제네릭 공부하다가 벌써 시간이 늦었길래 내일을 위해 이쯤에서 마무리한다. 생활 패턴 지키기 잊지 말자.

 


2. 기술자 필독서

여러 추천 도서가 있었는데 다 좋아보여서 고르는 데 고민 좀 했다.

그래서 고민 끝에 일단 질러보는 걸로 결정! ㅎㅎ 오늘도 이렇게 물욕은 멈출 줄 모르고............ 여기에 리팩터링까지 같이 해서 사고 싶었는데 아직 js는 공부하지 못했고 근데 또 1판은 절판이라 보류했다.

일단 제일 먼저 읽어보고 싶은 책으로는 <한 권으로 읽는 컴퓨터 구조와 프로그래밍>을 선택해봤는데 잘 읽어나갈 수 있을지 너무 어렵진 않을지 걱정은 되지만 그만큼 유익한 내용이 담겨 있다고 생각했다. 일단 읽기를 도전해보고 안 읽히면 공부해야지 어쩔 수 있나...........?

넉넉하게 이번주 안에는 오겠지 싶어서 토요일부터 시작 날짜로 잡고 7월 3일까지 읽어보겠다! 하고 계획은 세웠는데 잘 될지 모르겠다. 계산 상 37일 동안 하루에 대략 17 페이지 정도를 읽어야 하는 분량인데..... 가능할까? ㅎ 근데 기간을 널널하게 잡으면 오히려 헤이해지는 타입이라서 일단 배송 오는 거 보고 얼마나 읽기 어려운지.....(^^)에 따라 조정할 생각이 있다. 제발 많이 어렵지 말아줘.