본문 바로가기
IT 개발자 면접 준비

JAVA 개발자, 기초 개념 면접 질문 모음

by 워니 wony 2019. 6. 12.

자바 개발자 면접을 보는 경우 이론 개념에 대해서 물어보는 경우가 있다.

 

프로그램을 만들면서 수 없이 클래스를 만들고, 객체를 생성했지만, 갑자기 '클래스와 객체'에 대해서 설명하라고 하면, 개념 보다는 클래스는 만드는 방법이 먼저 떠오르고 아무런 말이 떠오르지 않는 경우가 있다. 그렇기 때문에 면접 전 기본 개념에 대해서는 2~3줄 정도로 설명할 수 있도록 알고 있는 것이 좋다.

 

 

  • 객체지향 프로그래밍이 무엇인지 설명하시오.
  • 객체지향 프로그래밍의 특징을 설명하시요.
  • 클래스는 무엇인가?
  • 상속과 다형성에 대해 설명하시오.
  • 추상클래스와 인터페이스를 비교하시오.
  • 메소드 오버라이딩과 오버로딩을 비교하시오.
  • 접근제어자에 대해 설명하시오
  • Wrapper 클래스는 무엇인가요?
  • 컬렉션 프레임워크란 무엇이고, 왜 사용하는지 설명하시오.
  • static에 대해서 아는대로 설명하시오.
  • jAVA와 C언어의 차이는 무엇인가요?

사실 객체지향 프로그래밍에 대한 내용은 별도로 하나의 포스팅을 해도 될 정도로 많은 내용을 담고 있고, 쉽지 않은 개념이다.

하지만, 면접에서는 논문발표를 하는 것이 아니기 때문에 해당 질문을 받았을 때 내가 개념을 알고 있고, 실제로 사용해 보았고, 프로그래밍하는데 문제가 없겠다 라는 수준으로 요약해서 이야기하면 된다.

 

 

 

 

객체지향 프로그래밍이 무엇인지 설명하시오.

객체지향 프로그래밍(OOP, Object Oriented Programing)은 자료(객체) 중심 프로그래밍이다.

공통된 속성과 기능을 묶은 클래스를 정의하고 해당 클래스를 기반으로 프로그래밍을 하는 것. 

 

개발해야 하는 프로그램이 복잡해 짐에 따라 절차지향으로 프로그램을 하는 경우 동일한 코드를 반복하여 사용하는 등 어려움이 있다. 이러한 것을 해결하기 위해서 나온 것이 객체지향 프로그래밍이다. 공통된 속성과 기능을 가지고 있는 클래스만들고 해당 클래스를 필요한 곳에서 객체 생성하여 사용하여 재사용성을 높이고, 유지보수를 용이하게 하는 프로그래밍 방식이다. 

 

 

객체지향 프로그래밍의 특징을 설명하시오.

캡슐화(은닉성) 

  • 관련 있는 속성과 기능을 하나로 묶고, 외부로부터 직접적인 접근은 차단하고, 자료를 수정 또는 조작 할 수 있는 동작을 내부에 두는 방식. 내부가 어떻게 동작하는지는 알 수 없고, 접근은 가능하게 해서 결과만 리턴 받도록 한다.

추상화

  • 사물들의 공통 특징(추상적 특징)을 파악해서 인식의 대상으로 삼는 행위
  • 클래스를 만드는 행위

다형성

  • 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
  • 오버라이딩이나 오버로딩으로 구현한 메소드는 동일한 이름의 메소드를 실행 시켜도 다른 기능으로 동작함
  • 상속관계(is-a)와 다른 클래스에 소유된 (has-a관계)

 

클래스는 무엇인가?

클래스는 공통되는 객체의 속성과 기능을 코드로 구현한 것

보통 클래스는 설계도면이라고 설명하기도 함.

 

클래스를 만드는 이유는 객체지향 프로그래밍의 재사용성을 높이기 위한 것으로 필요한 경우 동일한 속성과 메소드를 반복적으로 사용하는 것이 아니라 객체를 생성해서 해당 기능을 사용하면 됨


* [참고] 객체 : 클래스로 만드는 object. 사용하고자 하는 클래스를 'new 클래스명'으로 생성하는 것이 객체

 

 

상속과 다형성에 대해 설명하시오.

객체지향 프로그램은 코드를 수정하거나 추가 하는 것이 유연하여 유지보수가 편하다. 프로그램을 유연하게 하는 기반이 상속.

클래스끼리 상속을 받을 수 있으며, 상속을 받는 경우 하위 클래스가 상위 클래스가 가지고 있던 메소드를 재정의 해서 사용할 수 있다. 그리고, 자바는 다중 상속을 지원하지 않는다.

 

다형성은 하나의 메소드나 클래스가 다양한 방법으로 동작하는 것을 말한다. 메소드 오버라이딩, 오버로딩으로 다형성 구현이 가능하다.

 

 

추상클래스와 인터페이스를 비교하시오.

추상클래스는 구체화 되지 않은 추상 메소드를 하나 이상 가지고 있는 클래스를 말한다. 추상 클래스는 추상 메소드를 가지고 있기 때문에 객체를 만들 수 없고, 객체로 만들기 위해서는 추상클래스를 상속 받아서 추상 메소드를 구체화 시켜야 한다.

 

인터페이스는 완전 추상이라고 이야기 할 수 있으며, 추상클래스와 다르게 멤버변수와 구체화된 메소드를 가질 수 없다. 상수와 추상메소드만 가질 수 있다. 참고로 Java 8부터는 디폴트 메서드와 정적 메서드를 구현할 수 있다.

 

자바에서 클래스는 다중 상속이 불가능하여 1개의 클래스만 상속을 받을 수 있다. 다중 상속의 효과를 기대할 목적으로 인터페이스를 이용한다. 

 

 

 

메소드 오버라이딩과 오버로딩을 비교하시오.

메소드 오버라이딩(method overriding)

  • 상속 받은 클래스의 메소드를 재정의 하는 것.
  • 메소드 오버라이딩을 하기 위해서는 상속 받은 클래스의 메소드의 이름뿐 아니라 매개변수의 타입과 갯수도 동일해야 한다.

 

메소드 오버로딩 (method overloading)

  • 동일한 메소드명를 가진 메소드를 매개변수의 타입이나 갯수를 다르게 하여 구현하는것. 
  • 메소드를 사용하는 경우 매개변수의 타입이나 갯수에 따라 다른 기능을 구현하도록 프로그래밍 할 수 있음

 

 

 

접근제어자에 대해 설명하시오

자바 클래스에서 멤버 변수나 메소드 앞에 접근 제어자를 사용하여 개발자가 원하는 범위까지만 접근이 가능하도록 할 수 있다. 접근제어자를 활용하여 정보은닉을 할 수 있다.

 

  • public : 접근 제한이 없다. 어디서나 해당 멤버변수나 메소드에 접근 가능하다.
  • protected : 동일 패키지, 외부 패키지의 하위클래스에서 접근 가능. 상속 받은 클래스에서 사용하게 하고자 하는 경우 해당 접근제어자를 사용한다.
  • default : 아무런 접근제어자를 명시하지 않으면 default 처리. 같은 패키지 내에서 접근 가능
  • private : 같은 클래스에서만 접근이 가능하다. private 멤버변수에 다른 클래스에서 접근 할 수 있도록 setter / getter 메소드를 생성하여 사용한다.

 

Wrapper 클래스는 무엇인가요?

자바의 기본자료형(int, float, double, byte, char 등)을 위한 클래스

매개변수가 객체이거나 반환값이 객체인 경우 기본자료형을 객체형으로 사용한다.

int의 Wrapper클래스는 Integer로 해당 클래스의 parseInt 메소드를 활용하여 문자열로 취급되는 "1"을 숫자로 반환할수도 있다. 

또한, 컬렉션 프레임워크의 제네릭으로 타입을 지정해 주는 경우 Wrapper 클래스를 써야 한다.

 

 

 

컬렉션 프레임워크란 무엇이고, 왜 사용하는지 설명하시오.

자바에 여러개의 데이터를 담는 경우 배열을 사용하게 된다. 허나 배열은 사이즈가 고정되어 있고, 같은 타입의 데이터만 담을 수 있다. 프로그래밍을 하는 경우 데이터를 추가 하고 삭제하는 경우가 다수 발생하기 때문에 이런 경우에 사용하기 위해 컬렉션 프레임워크를 사용하게 된다. 종류는 중복을 허용하지 않는 Set, 순서대로 넣는 List, key와 value로 값을 담는 map이 있다.

 

[참고] 제네릭 : 컬렉션 프레임워크는 다른 타입의 데이터를 담을 수 있다. 하지만 반복문 등을 사용하여 프로그램을 개발하면 다른 타입의 데이터를 연산 시키는 것이 쉽지 않기 때문에 컬렉션 프레임워크에 담을 자료형을 하나로 담아서 프로그래밍하는 것을 권장한다. 이것을 제네릭이라고 한다.

 

 

static에 대해서 아는대로 설명하시오.

static 변수, 메소드는 처음 설정된 메모리 공간이 변하지 않는다.

이러한 변수와 메소드를 정적 변수, 정적 메소드라고 한다. static을 사용하면 객체를 생성하지 않고 변수나 함수를 사용할 수 있다. 쉽게 접근 할 수 있고 공통의 메모리를 가지기 위해 사용한다. 

 

클래스를 설계하는 경우 공통으로 사용하는 것에 static을 붙여서 사용하며, static을 붙인 메서드는 호출시간이 짧아져서 효율이 높아지는 장점이 있다. 허나 static  변수가 아닌 인스턴스 변수를 static method에서 사용할 수 없기 때문에 설계 시 고려가 필요하다.

 

 

JAVA와 C언어의 차이는 무엇인가요?

자바는 객체지향 언어이고, C언어는 절차지향 언어로 순차적으로 읽어가는 방식이다.

 

자바는 클래스로 인해 재사용성이 있고, 다형성, 캡슐화 등의 장정이 있지만 메모리를 많이 사용하고 속도가 상대적으로 느리다. 

C 언어는 하드웨어를 직접 제어할 수 있는 언어로 속도를 요하는 프로그램 등에서 사용한다. 프로그램의 목적에 따라 언어를 사용하게 된다.

반응형

댓글