White Cat's Paw

면접후기

[면접후기] 안드로이드 어플 회사 개발 면접

JungMayo 2025. 4. 8. 18:09

마지막 수업과정으로 flutter를 들었었고 앱개발에도 관심이 생겨서 안드로이드 개발 관련 직무에도 이력서를 넣었는데 면접 제의 연락이 와서 면접을 보고왔다. 다 기억나진 않지만.. 최대한 기억나는걸로 적어보자면..(면접 볼때 노트를 들고 다니고 싶다 ㅜㅜ.. 경력있으신 개발자분이 해주는 cs관련얘기도 자세히 적고 싶은데 ..)

 

1. 인성면접

  • 어떤 회사인지 알아보고 왔는지? 우리 회사가 뭐하는 회사인지?
  • 회사 다닌 기간이 조금 짧은데 왜 그런지? 그리고 공백기가 있는데 그동안 뭐했는지?
  • 개발을 하려고 한 계기 및 직종을 바꾼 이유?
  • 학원에서 해당 개발과정을 선택한 이유는?
  • 전공자와 비교했을 때 나를 뽑아야하는 이유가 있는지?
  • 문제해결 과정을 중요시 한다고 했는데 어떻게 해결하는지?
  • 개발자로서 가장 중요하게 생각하는 점은?
  • 개발은 적성에 맞다고 생각하는지?
  • 팀 프로젝트를 진행하면서 어려웠던 점?
  • 플젝하면서 개발부분에서 어려웠던 점 그리고 어떻게 해결했는지?
  • 지금 따로 어떻게 공부를 하고있는지?(이런 뉘앙스 : 학원 안다니는 지금은 어떻게 스스로를 발전시키고 있는지에 대한 질문) --> 수치화 하는 것을 좋아하기 때문에 그냥 공부한다, 구글링 하면서 보고 있다 말고 구체적으로 어떻게 공부를 하고 있는지 해당 부분이 부족해서 이 부분을 채우려고 이것을 하고 있다 이런식으로 자세한 답변을 원하시는 것 같았다.
  • 우리는 코틀린을 사용하는데 이런 부분은 괜찮은지?

2. cs면접

  • GC가 무엇인지? 그리고 JAVA에서는 GC가 자동으로 관리해주는데 이때의 단점은?
    --> 동적으로 할당한 메모리 영역중 개발자가 사용하지 않는 것을 없애주는 역할
    --> 단점1 : 추가적인 CPU, 메모리 자원을 사용하기 때문에 오버헤드(어떤 처리를 하기 위한 비용,메모리)가 발생함
    --> 단점2 : 삭제되는 시점을 알 수 없고 모든 작업이 일시적으로 멈추는 stop-the-world 현상 발생할 수 있음

 

  • 인터페이스와 추상클래스의 차이는?

인터페이스
 - java 8부터 default(기본메서드같은), static 메서드 정의 가능
 - java 9부터는 private 사용 가능
 - 필드는 public static final 상수만 선언 가능 하고 생성자 정의 불가능함

추상 클래스

 - 단일 상속만 가능하다
 - public, private 등 접근제어자 자유롭게 사용 가능함
 - 필드 선언 가능하고 생성자 정의 가능

 

- default

 - 오버라이드 해도 되고 안해도 된다
 - 외부에서 객체를 통해 호출이 가능하다.

 - public void~ 이런식이 아니라 default로 선언해야 기본메서드 역할을 한다.

 

- static

 - 오버라이드 불가능
 - 외부에서 인터페이스 이름명으로 메서드를 호출할 수 있음 (오버라이드가 안되기때문에 지정된 함수로만 사용이 가능)

 

- Java 9 이후에 추가된 private

 - 공통 로직 분리용으로 인터페이스 내에서 사용하게 된다.

 - private 메서드가 포함된 default 메서드는 오버라이드는 가능하지만 그 안의 private 메서드는 사용할 수 없음
 - 아니면 오버라이드 없이 default 메서드만 호출해서 사용하는 방법이 있음( 그러면 private 메서드 사용 가능)

 - private는 당연하게도 상속, 오버라이드 다 안됨 인터페이스 내에서 로직 정리용으로 사용하는 것

 

## 근데 다중상속이고 상속받은 각각의 인터페이스 안의 메서드가 같은 이름일때, 오버라이드를 하지 않았다?

 - 컴파일 에러 발생. 구현 클래스는 반드시 해당 메서드를 오버라이드 해야 한다.

 - 오버라이드한 메서드 안에서 특정 인터페이스의 구현을 사용하려면 인터페이스이름.super.메서드이름() 으로 명시적으로 지정해주어야 한다.

 

 

  • 싱글톤을 사용하면 개방폐쇄의 원칙에 어긋난다고 했는데 이것을 해결할 수 있는 방안은?
    --> 인터페이스를 사용한다. 인터페이스를 만들어서 상속한 후에 그 안에서 싱글톤을 만들기

 

  • 상속을 많이 사용하면 안좋은 점은?
    --> 상속을 타고 타고 타고 했을 때 만약 중간에서 꼬여버리면 전체 코드가 다 망가져버린다는 단점.. 그리고 결합도가 너무 높아져서 안좋음. 서로의 코드에 너무 많이 의존하게 된다.

 

  • SOLID의 원칙이 무엇인지 말할 것
    --> 개방폐쇄, 단일책임, 리스코프치환, 인터페이스 분리, 의존 역전 

 

  • 클래스와 클래스끼리 결합도가 높아지면 그걸 낮추는 방법은?
    --> 인터페이스를 사용해서 결합도를 낮춘다.

 

  • stringbuilder, stringbuffer의 차이는?
    --> builder는 빠르지만 여러 스레드에서 사용할 땐 안전하지 않음, buffer는 반대

 

 

기억나는대로 더 추가할 예정인데.. 우선 현재 기억나는건 이정도..? 

인성 질문도 그렇지만 cs 질문은 받으면 아는건데도 더더욱 머리가 하얘진다..

공적인 언어로 말해야 되다 보니까 더 깊게 생각한다고 그런 것도 있지만 가장 중요한건 툭 치면 툭 나올 수 있도록 반복 또 반복 그리고 계속적인 공부가 더 필요하다는 것을 느꼈다.

분명 알았던 것도 한동안 안보면 까먹는게 사람이기 때문에 면접이 아니라도 습관적인 공부가 필요하다.

뭔가를 모르는 건 더 배울 수 있어서 좋지만 그냥 많이 아는 사람이 되고싶다. 10년뒤에 나도 누군가에게 설명할 수 있고 면접을 봐줄 수 있을 정도의 지식과 개발실력을 가질 수 있도록 노력해야겠다고 생각했다.
면접을 봐주신 개발자분들이 잘 알고 계셔서 모르는 부분을 자세히 알게되었고 더 깊게 파볼 수 있었다.