이론

java 신입면접 질문리스트

벨포트조던 2016. 9. 1.
반응형

제가 면접을 보면서 들었던 질문과 면접을 진행하시는 선배 개발자들이 

주로 자바 신입 개발자들을 뽑을때 이런 질문들을 한다고 합니다.

 

미리 대비해서 준비한다면 면접을 볼때 좋겠죠 ^^?

 

모든 질문에 대한 답을 적어드려도 되지만 이게 딱 정답이다라고 확신할 수 없습니다.

그래서 직접 검색을 하셔서 여러 블로그를 둘러보시고 예제를 통해 만들어서 접목 시키시는게 도움이 될 것입니다.

 

 

- 객체지향의 개념을 설명하시오 

 

자바의 핵심이기때문에 간간히 나오는 질문입니다.

객체, 클래스, 캡슐화, 상속, 다형성 에 대해서 공부하시면 도움이 될것입니다.

 

 

 

 

 

 

- synchronized에 대해 설명하시오 

 

자바의 핵심중 하나인 멀티 쓰레드를 사용하여 여러 자원을 여러 쓰레드가 비동기적으로 처리하다보면

발생하는 자원의 유실등의 문제로 동기화(synchronized) 처리를 해주는 경우가 있습니다. 

검색을 통해 예제를 만들어서 공부하셔야 이해가 빠릅니다. 

 

 

 

 

 

 

- 쓰레드와 프로세스를 설명하시오

 

쓰레드와 프로세스는 엄연히 다릅니다.

프로세스는 쉽게 말해서 하나의 작업 단위라고 할 수 있습니다.

그래서 멀티 프로세스로 작업을 한다면 서로 사용하는 메모리와 자원이 다르기에 자바에서 멀티 쓰레드 방식으로 프로그래밍을 합니다.

한 프로세스 내에 여러 쓰레드가 존재할수 있고 해당 쓰레드들은 자신을 포함한 프로세스의 자원을 공유합니다.

그래서 멀티 쓰레드 프로그래밍을 사용했을때 하드웨어의 성능에 따라서 단일 프로세스 내에서도

월등한 작업속도를 낼 수 있습니다.

단 쓰레드 하나하나를 직접 조작할 수 없기에 쓰레드들이 데이터를 물고 죽어버리던지 했을때

데이터의 유실에 주의하여하하고 각각 쓰레드들이 언제 데이터를 가지고 올지 속도 면에서도 확신을 할 수 없기에

이런 부분에서 주의를 요합니다.

자세한 사항은 예제를 만들어보시고 위의 synchronized 와 함께 사용해보시는것도 좋을듯 합니다.

 

 

 

 

 

 

- 상속에 대해서 설명하시오

 

상속을 통해서 부모 클래스의 요소들을 가지고 자식 클래스를 만들 수 있습니다.

자바 서적을 보면 앞부분에 등장하며 자바를 다룰때 항상 빠지지 않는 부분이기 때문에

상속의 특징과 다중상속이 되지 않는 자바의 특징을 이해하시면 도움이 될것입니다.

다중상속 문제를 해결하기 위해 인터페이스에 대해서도 공부를 하면 좋겠죠?

 

 

 

 

 

 

- 오버로딩과 오버라이딩에 대해서 설명하시오

 

오버로딩이란 클래스내에서 같은 이름으로 메서드를 만드는것을 말합니다.

단 메서드의 이름이 같고 매개변수(파라미터)의 갯수나 타입이 서로 달라야 합니다.

어떻게 보면 확장의 기능을 하고 있는것이 오버로딩입니다.

예를 들어서 공격하다 라는 특징을 갖는 메서드를 만들때 메서드의 네이밍을

 

public void attack(){

// 실행 내용들

}

 

위와 같이 하게 될텐데 attack 이라는 메서드의 파라미터로 int타입의 데미지 를 넘겨줄수도 있지만

데미지와 함께 String 타입의 공격대상을 넣어준다고 합니다.

 

public void attack(int dam, String target){

// 실행 내용들

}

 

위와 같이 넣었는데 둘중에 파라미터를 하나만 넣으면 메서드를 찾지 못해 이셉션이 발생할 것입니다.

 

public void attack(int dam, String target){

// 실행 내용들

}

public void attack(int dam){

// 실행 내용들

}

 

위와같이 attack 라는 이름으로 서로 파라미터가 다른 두개의 메서드를 만들었습니다.

똑똑한 자바는 파라미터의 타입, 갯수를보고 어떤 메서드를 호출할 것인지를 분별해서 실행시킵니다.

 

위와같이 하나의 메서드 이름으로 여러가지 선언을 할수 있게 확장하는것을 오버로딩이라고 합니다.

 

그렇다면 오버라이딩이란 쉽게 말해서 상위클래스를 상속받을때 부모클래스의 속성을 자식 클래스에서 재정의해서 사용하는

재정의의 기능을 가진것입니다.

부모클래스는 이런 메서드에서 이런 기능을 하여 자식 클래스들에게 상속을 해줬습니다.

나머지 자식들은 전부다 그 기능을 그대로 사용하는데 한 자식이 기능을 다르게 사용해야 할 때 사용하며

부모 클래스의 메서드 이름과 파라미터를 동일하게 선언하여 기능 부분을 바꾸어 사용하게 됩니다.

 

 

 

 

 

 

-스트링과 스트링버퍼의 차이에 대해 설명하시오

 

자바의 기본 데이터 타입인 int, float, char 등과 다르게 String은 데이터 타입이 아닌 클래스객체입니다.

데이터 타입들은 시작할때 소문자로 시작하지만 String은 대문자로 시작하죠?

흡사 클래스의 객체를 만들때와 동일합니다.

또한 String은 불변 객체입니다.

한번 String name = "제이"; 라고 선언을 해버리면 먼저 String 객체 타입인 name이라는 인스턴스를 만들고

메모리에 제이 를 올려버립니다. 그리고 name이 제이를 참조하는 래퍼런스가 되는것입니다.

중요한점은 지금부터입니다.

이제 이 name에 새로운 내용을 추가합니다.

name = name + "잡식성개발자";

위와같은 소스를 적용하게 되면 name인스턴스가 가리키는 값은 제이잡식성개발자 가 됩니다.

우리는 흔히 이런식으로 코딩을 했을텐데 아까 위에서 String이 불변 객체라고 성명을 했듯이

한번 선언된 내용에 추가적으로 바뀌지 않습니다. String은 char의 배열 형태가 아니기 때문에 내용의 추가와 삭제가 되지 않거든요

그럼 도대체 어떻게 name 변수의 값이 바뀌는건지 답은 내부에 있습니다.

name = name + "잡식성개발자"; 구문이 실행될때 실제로는 스트링버퍼를 새로 생성해서

name이 가리키는 제이 를 만들어주고 스트링버퍼의 append 함수를 이용하여 잡식성개발자를 붙여줍니다.

그렇게 완성된 스트링버퍼값을 메모리에 올리고 name은 다시 이 값을 참조하게 됩니다.

스트링버퍼는 char 타입의 배열 형태로 되어있어서 한글자 한글자를 append 할 수 있다는것을 아셔야합니다.

그럼 그 와중에 생겨난 메모리 안의 제이 라는 값과 잡식성개발자 라는 값은 가비지컬렉터가 가지고 있다가 필요없어서 버리게 되겠죠

그 짧은 순간에 이런 일처리가 일어나게 되는겁니다.

아주 미세하지만 스트링버퍼를 사용하는경우가 스트링객체를 사용하는것보다 빠를것같다는게 제 생각입니다.

 

 

 

 

 

- 추상클래스와 인터페이스의 차이

 

얼핏 보면 비슷한것 같지만 추상클래스와 인터페이스의 차이는 분명히 있습니다.

추상클래스는  추상메서드 (이름만 존재하고 기능부분이 생략된)를 포함하고있고

이를 상속받은 하위 클래스에서 오버라이딩하여 구현합니다.

어떻게 보면 하위 클래스를 만드는 틀 이라고 할 수 있습니다.

이런이런 기능을 가진 클래스를 만들꺼지만 하위 클래스에서 내용을 구현하겠다 라는겁니다.

건축으로 따지면 골조역할을 한다고 생각하시면 쉽습니다.

 

그렇다면 인터페이스는 일종의 규약 같은겁니다.

이러이러한 기능을 가진 클래스를 만들꺼라는 규약을 정해놓고

하위 클래스에서 해당 기능을 규약대로 구현합니다.

장난감으로 따지면 조립설명서 라고 생각하시면 쉽습니다.

 

다중 상속을 지원하지 않는 자바에서는 보통 추상클래스보다는 인터페이스를 사용하여

객체간의 결합도를 낮추는 프로그래밍을 하곤 하는데 추상클래스 또한 쓰이는 경우가

간혹 있기때문에 꼭 차이점을 알고 넘어가시는게 좋을 것 같습니다.

 

 

 

 

 

 

- 컬렉션 객체의 차이점과 사용법

 

자바에 컬렉션이라고 하면 대표적으로 많이 쓰이는 어레이리스트, 스텍, 큐, 해시맵, 해시테이블 등등이 있습니다.

컬렉션을 공부하실때는 그 컬렉션이 선입선출이냐 후입선출이냐의 개념과 사용법을 알아보시면 좋을듯 합니다.

깊이 공부하시려면 그 컬렉션을 구성하고 있는 알고리즘을 이해하시면 외우실때 더 편합니다.

 

 

 

 

 

 

- 새로운 언어에 대한 거부감이 있습니까?

 

어딜가나 종종 등장하는 면접 질문입니다.

면접관이 새로운 언어에 대한 거부감이 있냐고 물었을때 제가 대답한 내용입니다.

어느 언어든 사실 사용 문법만 다를 뿐 알고리즘이나 형식은 거의 비슷하다고 생각하기때문에

한가지 언어로 기반을 잘 다져두면 나머지는 문법만 조금 공부하면 된다고 생각합니다.

그래서 다양한 언어에 대한 거부감은 아니고 오히려 더 많은 언어를 배우고 싶습니다.

라고 대답했더니 면접관이 하시는 말씀이.. 30대 개발자를 보는줄 아셨다고 하네요..

이런 사고방식을 가지고 있는 초급 개발자들이 별로 없다고 하시며 좋은 마인드라고 칭찬도 들었습니다.

 

 

 

저도 아직 면접을 보고 있는 관계로 더 질문이 올라온다면 추가하여 정리하겠습니다 ^^

다들 좋은 회사에 취업하시길 바랍니다.

 

 

* 이런 회사는 피하면 좋다?

팁입니다.. 면접을 보다보면 이런저런 요령이 생기더군요

 

- 설립된지 2년 미만에 연매출소득이 적은회사는 일하다가 회사가 사라지던지 임금을 못받는 경우도 있습니다.

- 프로젝트 마감이 다음주까진데 다 만들수 있습니까? 라고 말하는 회사는 몸이 고생하고 프로젝트 완수 못했을때 책임이 돌아올 수도 있으니 피하시는게 좋습니다.

http://it.nodong.net 의 q&a 게시판에 회사 이름 쳐봐서 안좋은 글이 있다면 피하시는게 좋습니다.

반응형

'이론' 카테고리의 다른 글

면접 질문 까먹은거 정리중  (0) 2022.07.01
jsp 웹 프로그래머 면접  (0) 2016.09.01
웹 프로그래머(JAVA, JSP) 면접 예상 질문  (0) 2016.09.01
정적 바인딩과 동적 바인딩  (0) 2016.08.25
자바스크립트 클로저  (0) 2016.08.24

댓글