작성일자 2월 9일로 오늘 한 회사의 화상 면접을 보았다. 일단 예상 결과는 처참히 망...ㅎㅎㅎ
그래도 좋은 건 추억이고 안 좋은 건 경험이라 해서 정말 좋은 경험을 한 거 같다.
이번 기술 면접에서는 정말 기술면접다운 면접을 보았다.
중간중간 내가 왜 편입을 하였는지 굳이 편입을 안해도 프로젝트나 커리어를 쌓을 수 있지 않나?
그리고 프로젝트를 하면서 어떤 역할과 어떻게 개발하였는지,
이런 질문들로 조금 더듬었지만 말하고자 하는 의도는 전달했다.
본격적인 기술 면접을 보면서 아직 내가 Spring보다 Java의 기초나 지식이 많이 부족하다는 것을 새삼 느꼈다.
면접관님도 친절하시고 밝은 분위기를 주도하시려 하였지만,
결국 내가 제대로 대답을 못했으니 앞으로 공부를 조금 더 해야 겠다고 다짐했다.
주로 Java의 객체지향 설계나 인터페이스, 클래스 정의 위주로 질문하셨고, Spring 관련해서는 가장 기억에 남는 질문이 Spring Bean, IoC, 그리고 Spring 인터셉터와 필터의 공통점과 차이점을 질문하셨다.
이번엔 Java에 대한 면접 예상 질문 몇가지 긁고 실제 받았던 질문을 준비를 하려 한다.
클래스와 인스턴스의 정의
클래스는 기본 뼈대이며 예를 들어 자동차라고 예시를 들면 자동차나 기차, 버스 등 탈 것의 큰 틀이라고 볼 수 있고, 인스턴스는 구체적인 상태와 행위의 집합입니다. 예시를 든 자동차로 인스턴스는 엑셀, 승차 인원 등 여러 가지 상태와 기능을 나타낼 수 있습니다.
인터페이스의 정의와 사용하는 이유
인터페이스는 객체와 객체 사이에서 일어나느 상호 작용 매개로 사용됩니다. 서로 이어주는 브릿지의 역할과 프로젝트의 설계도로 생각할 수 있습니다.
모든 기능을 추상화로 정의한 상태로만 선언합니다. 예를 들면 회원 등록, 조회, 삭제 등등
추상 클래스처럼 인스턴스를 생성할 수 없고, 상속 받은 클래스에서 구현한 뒤에 자식 클래스를 인스턴스하여 사용합니다.
사용하는 이유는 개발 시간 단축과 클래스간의 결합도를 낮춰 종속성을 줄이고 유지보수성을 높이도록 하기 위해 사용합니다.
생성자를 사용하는 이유
객체가 생성되는 시점부터 인스턴스 값을 초기화 설정하여 사용됩니다.
생성자 호출이 되지 않으면 초기화가 안된 값으로 에러가 발생되기도 합니다.
다형성의 정의
기본적인 정의로 하나의 타입으로 상위 클래스 타입의 변수가 복수의 하위 클래스 객체를 참조할 수 있도록 하는 것입니다. 이로 인한 장점으로 여러 타입의 객체를 하나의 타입으로 관리가 가능하며 적은 결합도로 코드 재사용성이 높아집니다. 또한 다형성을 구현하기 위해 오버로딩과 오버라이딩을 이용합니다.
Java 오버로딩과 오버라이딩 정의 및 차이
오버로딩은 같은 이름의 메서드 여러 개를 가지면서 매개 변수의 유형과 개수가 다르도록 정의하는 기술이고,
오버라이딩은 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 기술입니다.
둘의 차이는 크지 않습니다. 다만 오버로딩의 성립 조건에서 매개 변수와 타입이 다르지만, 오버라이딩은 매개 변수와 타입이 같아야 합니다.
Java에서 추상 메소드와 추상 클래스란?
추상 메소드는 내용이 없는 메소드로 구현은 하지 않고, 선언만 한 메소드입니다. 굳이 부모 클래스에서 구체화하여 정의할 필요가 없을 경우, 선언만 하고 상속받은 자식 클래스에서 재정의하도록 할 때 사용합니다.
추상 클래스는 한 개 이상의 추상 메소드를 가지는 클래스이며, 일반 클래스에 비해 구체적이지 않고 추상적입니다.
이미 추상 메소드에서 선언만 하여 불완전한 메소드가 되기에 객체 생성이 되어서도 안됩니다.
추상 클래스와 인터페이스의 공통점과 차이점
둘의 공통점은 선언만 있고 구현 내용이 없다는 점입니다. new를 통해 객체를 생성할 수 없고, 상속받은 자식만이 객체생성을 할 수 있습니다.
인터페이스와 추상클래스의 차이점
인터페이스(Interface) | 추상클래스(Abstract Class) |
구현 객체의 같은 동작을 보장하기 위함 | 추상클래스를 상속받아 기능을 이용하고, 확장시키기 위함 |
다중 상속 가능 | 다중 상속 불가능 |
추상메소드만 가능 | 일반메소드+추상메소드 가능 |
상수+추상메소드 형태 | 일반변수(가능)+일반메소드(가능)+추상메소드 형태 |
생성자와 일반변수를 가질 수 없음 | 생성자와 일반변수 모두 가질 수 있음 |
implments | extends |
메소드 선언만 가능 | 메소드의 부분적인 구현이 가능 |
캡슐화
내부의 코드를 캡슐처럼 보호하기 위하여 사용됩니다 (정보 은닉). 즉 캡슐화를 위하여, 모든 인스턴스 변수를 private으로 명시하고, setter와 getter 메소드를 만들어 접근하게 합니다. 캡슐 안의 데이터에 직접적으로 접근하는 것은 불가능하며, 오로지 메소드로만 접근할 수 있습니다.
일단 기초 지식을 다시 공부하는 겸 구글링해서 아는 부분을 생각하여 작성해봤다... 정말 학부 수업에 다 배웠던 부분이고, 심지어 Java 성적이 A+인데 면접에서 더듬었다는건 공부를 덜 했다는 뜻이다. (교수님이 천사같이 학점을 잘 주신 거 같다...)
Spring 질문은 오히려 학부 수업에 없는 내용인데 현재 공부를 하면서 대답을 더 많이 했다고 생각한다.
역시 개발 공부는 꾸준히 해야 한다고 뼈 맞으며 다시금 느낀다 ㅋㅋ...ㅋㅋㅋㅋ
일단 기초 질문 몇가지 포스팅했지만 새로 글을 써서 포스팅할지 여기에 추가를 할지 고민해보면서 공부+블로그 작성을 병행하려 한다.
'면접 대비' 카테고리의 다른 글
백엔드 개발자 예상 면접 질문 (CS 지식) (2) | 2022.01.28 |
---|