레벨인터뷰 1 회고

June·2022년 4월 21일
0

우테코

목록 보기
33/84

우테코를 진행하면서 와! 소리가 나올만큼 좋은 것들이 있다. 오늘 진행한 레벨로그도 그 중 하나다. 크루 6명과 코치 한 분이 한 조를 이뤘고 한 명의 인터뷰이에게 3명의 인터뷰어 그리고 2명의 옵저버가 레벨1동안 학습한 내용에 대해 질문하는 모의 면접 시간을 가졌다.

더즈, 레넌, 아서, 아스피, 판다 그리고 브리와 한 조가 될 수 있었다. 다들 처음 만나는 크루들이어서 반갑기도 했고, 모의 면접 준비를 정말로 하지 못해서 걱정도 많이 되었다.

막상 질문들이 시작되니 어떻게 답변했는지도 모르게 정신없이 진행되었다. 그래서 받은 질문들과 했던 생각들이 휘발되기 전에 최대한 기록해보려 한다.

받은 질문, 답변

(기억나는대로)

  1. 정적팩터리 메서드
    • 무엇인지, 생성자와 대립되는데 비교하여 어떠한 장점이 있는지
      • 생성자 커스텀. 이름 붙이기, 캐싱, 상위 타입 반환 등. 생성자와 대립된다고 생각하지 않는다. 내부적으로 결국 생성자 이용함.
    • 사용 예시
      • 자동차 객체를 생성할 때 어느 위치에 있는지 처음에는 숫자만 생성자에 넘겨줌. 제 3자가 코드를 보고 이해하기 어려울 수도 있음. createWithPosition() 이런식으로 네이밍을 붙여줌으로서 이해.
    • 그렇다면 단점은 없는지
      • 커스텀화의 단점인데 결국 문서를보거나 구현체를 봐야함. 하지만 컨벤션이 있으니 장점이 더 크다고 생각.
  1. getter를 지양해야 하는 이유

    • 디미터의 법칙이 무엇인지, 어기면 왜 안좋은지
      • 간단하게 말하자면 한줄에 점을 한번만 찍어라이지만, 본질적으로 객체에게 메시지를 보내라. 객체 내부의 객체까지 외부에서 꺼내서 사용하면 절차지향적. 나중에 변경할 부분이 많이 생긴다.
  2. 명령형 vs 선언형

    • 선언형 프로그래밍의 개념
      • how 보다는 what에 보다 집중
    • 선언형 프로그래밍을 이용해서 side effect를 줄여본적이 있는지 예시
      • 자동차를 담는 리스트를 생성할 때 빈 리스트를 선언해두고 for문으로 add 해주는 방식에서 스트림을 이용해서 한번에 생성하는 방식. 전자의 방식에서는 list 자체가 자동차를 추가하는 과정에서 노출되니 side effect 존재 가능
  3. 불변

    • 불변을 사용하면 어떤 장점이 있는지
      • 예측 가능한 상황에서 코드 작성 가능. 불변이 아니면 외부 어딘가에서 변경을 할 수 있으므로 불안. 특히 멀티스테르 환경에서 더욱.
    • 불변을 이루는 방법으로 클래스 확장 금지가 있는지 클래스를 확장하면 어떤 문제가 있는지 구체적인 예시?
      • 클래스를 확장하면 확장한 클래스에서 상위 클래스의 필드에 접근할 수 있다. 이걸로 변경이 일어날 수 있다 (?): 추가 학습 필요
  4. 인터페이스와 추상클래스

    • 인터페이스에 디폴트 메서드 기능이 자바8부터 왜 생겼는지?
      • 기존의 인터페이스에 새 기능 추가할 때 중복 줄여주기? (이렇게 대답했나?)
    • 디폴트 메서드가 생겨서 해결된 문제 예시?
      • 잘 떠오르지 않음. 힌트(?)
  5. 상속과 조합

    • 상속을 사용했을 때 단점
      • 상위 클래스 변경 어려움. 캡슐화 깨짐. 조합폭발. 불필요한 상위 클래스 기능 가지게 됨.
    • 조합을 사용해서 문제를 해결한 경험
      • 실제로 사용해보지 않음
    • 상속이 안좋은거라면 왜 자바 라이브러리들에서 상속을 이용한 것들이 있는지?
      • 우선 전제를 명확히 해야하는 것이 이건 구현에 대한 상속. IS-A 관계가 명확하다면 사용하는 것이 오히려 클라이언트 입장에서 이해하기 쉬울 것.
  6. Stream api

    • Stream api를 이용해본적이 있는지, 어떠한 장점이 있었는지
      • 함수형으로 프로그래밍이 가능했음.
    • 그렇다면 항상 좋은지?
      • 처음에는 항상 for문 대신 사용하려고 했지만, 원시 타입인 경우 성능이 for문보다 느려지기도 함. forEach의 경우 최종연산인데 여기에 로직을 넣으면 예상과 다르게 동작하기도 함.
    • 사용 경험?
      • 팀원들 간에 얼마나 공유되고 있는지 중요하다고 생각. 페어 프로그래밍할 경우 페어가 스트림을 알고있어서 사용하는 것이 더 유지보수성과 가독성이 좋다고 생각하여 사용.
  7. 좋은 코드란 무엇이라 생각하는지?

    • 처음에는 프로그래밍은 결국 도구라 생각함. 하지만 미션들을 진행하며 작은 실무 경험을 했다고 생각하는데 요구 사항들이 추가되고 페어와 함께 코딩을함. 새로운 기능이 추가돼도 유지보수 가능하고, 가독성 좋은 코드가 좋은 코드
  8. 그럼 가독성 좋은 코드를 작성하기 위한 노력 및 원칙?

    • SOLID 원칙 지키려 함
      • SOLID란?
        • D 까먹어서 물어봄. (단순히 나열하기보다 내 경험과 생각 말했으면 더 좋았을 것)
  9. 모던자바란 무엇인지?

    • 모던자바가 왜 생겼는지?
      • 기존 객체 지향에서 함수형 프로그래밍을 도입하며 stream, lambda, optional등 도입된 것
    • 그럼 함수형 패러다이밍 관련된 것만 모던자바인지?
      • 잘 모르겠음. 지금 생각해보면 LocalDateTime 같은 것도 모던자바에 들어온거 아니였나싶어서 꼭 함수형 패러다이밍 관련된 것만 그런건 아닌 것 같음 (?)

받은 피드백

학습 피드백

  • 경험을 들어서 잘 설명
  • 질문에 대한 대답에 본인의 생각까지 잘 설명했다.
  • 단순히 사용하는 것이 아니라 왜까지 생각하는 것을 알 수 있었다.

말하기

  • 전체적으로 말이 빠르다. 여유를 가지고 어, 음 같은 말들 줄이자.
  • 책상에 손 올리기 같은거는 실제 면접 때 지양

다른 크루들 보면서 배운 점

나라면 어떻게 답 했을까?

  • 제네릭이란 무엇인가?
  • 자바 11을 사용한 이유?
  • mvc 패턴을 사용한 이유?

면접

  • 질문이 무엇인지 정확히 파악하려하고 파악하지 못하면 되물음
  • 설명이 충분한지 인터뷰어에게 물어보며 파악
  • 차분하게 면접 상황 컨트롤

전체 피드백

  • 지식을 나열하지말고 경험과 엮어서 자신의 생각 이야기하기. 평소에 미션을 할 때도 이론과 경험을 묶으려 해보기.
  • 인터뷰어로서 어떤 질문들을 하게 됐는지를 잘 생각해보고 나중에 인터뷰이가 됐을 때 그걸 기반으로 역이용하기

느낀 점

면접을 볼 때 말이 빨라지는 안좋은 습관이 쉽게 없어지지 않는다. 단순히 인지해서 없어지지 않는다면 연습해서 없애기.

아는 것과 그걸 다른 사람에게 설명하는 것은 천지차이다. 100을 말하려면 그 이상을 알아야하고 연습도 필요하다. 다른 크루들이 질문에 대답하는 것을 보고 정말 평소에 고민을 많이하고 깊이있게 학습하는구나라고 느꼈다. 또 레벨로그를 통해서 진짜 레벨1이 끝났구나 그리고 의미있게 잘 보냈구나라는 걸 느꼈다.

오늘 처음 보는 크루들을 만나서 같이 저녁까지 먹고 좋았다.

1개의 댓글

comment-user-thumbnail
2022년 4월 21일

👍

답글 달기