Q) 자바의 특징은 무엇인가요?
A) 자바는 객체지향프로그래밍 언어입니다. 자바는 JVM 위에서 실행되기 때문에 OS에 의존하지 않고 실행할 수 있습니다.
Q) 객체지향언어의 장점은 무엇이 있나요?
A) 장점으로는 코드의 재사용성이 높습니다. 라이브러리만 임포트하면 원하는 기능을 바로 실행할 수 있습니다. 이를 통해 생산성이 높아지고 버그 발생률도 줄일 수 있습니다. 객체 단위로 코드를 작성하기 때문에 협업에 유리합니다.
+) 객체지향언어 4대 특징 : 추상화, 캡슐화, 상속, 다형성
+) 추상화는 실제 대상을 객체화하는 것이 아니라 필요한 정보만을 중심으로 간소화하는것. 캡슐화는 객체에 필요한 데이터나 기능을 책임이 있는 객체에 그룹화시켜주는 것. 상속은 상위클래스의 기능을 상속받아 사용하는 것. 다형성은 하나의 코드가 다양한 자료형으로 구현되는 것
Q) 자바의 컴파일 과정을 얘기해주세요.
A) 개발자가 작성한 코드는 자바 컴파일러에 의해 자바 바이트 코드 파일(.class)로 변경됩니다. 이 바이트 코드는 JVM의 클래스 로더(class loader)에게 전달됩니다. 클래스 로더는 JVM의 메모리에 클래스 파일을 로드합니다. 이후 실행 엔진이 메모리상의 바이트 코드들을 명령어 단위로 가져와서 실행하게 됩니다. 실행 엔진은 인터프리터와 JIT 컴파일러가 있습니다.
+)인터프리터 방식은 바이트 코드 명령어를 하나씩 읽어서 해석합니다. 전체적인 속도가 느리다는 단점을 가집니다. 이에 반해 JIT 컴파일러는 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경합니다. 전체적인 실행 속도는 훨씬 빠릅니다.
Q) 클래스가 무엇인가요?
A) 자바의 모든 코드는 클래스 안에서 정의되며, 클래스는 객체의 속성과 기능을 코드로 구현한 것입니다.
Q) 생성자란 무엇인가요?
A) 클래스를 처음 만들 때 멤버 변수나 상수를 초기화하는 것
Q) public, private, protected 차이는?
A) public은 외부 클래스 어디서나 접근이 가능합니다. private은 같은 클래스 내부에서만 접근 가능합니다. protected는 같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 있습니다. 이러한 예약어가 없는 default는 해당 패키지 내에서만 접근이 가능합니다.
Q) static 변수는 어떤 특징이 있나요?
A) 클래스 내부에 선언하지만 인스턴스 생성 시 마다 새로 생성되지 않고, 프로그램 실행 시 처음에 한번만 메모리 공간이 할당됩니다.
+)메서드에 static을 붙이면 static 메서드가 되는데, static 메서드는 클래스 인스턴스를 호출하지 않고도 클래스 이름만으로 호출이 가능합니다.
Q) 상속이란?
A) 상위 클래스를 상속받게 되면 하위 클래스, 즉 상속받은 클래스는 상위 클래스의 변수나 메서드를 사용할 수 있게 됩니다. 이게 가능한 이유는 하위 클래스 생성 시 상위 클래스의 생성자가 먼저 호출되고 하위 클래스의 생성자가 호출되도록 프로그램 내부에 이미 설정되어 있기 때문입니다. 하위 클래스 생성자에서 super()를 자동으로 호출하게 됩니다.
+) 상속에는 예약어 extends가 사용됩니다.
Q) 오버라이딩이란? 오버로딩과는 무슨 차이가 있나요?
A) 하위 클래스에서 상위 클래스에서 정의한 메서드를 재정의하는 것을 말합니다. 오버라이딩이 가능하려면 반환형, 메서드 이름, 매개변수 개수, 매개변수 자료형이 반드시 같아야합니다.
오버로딩은 같은 이름의 메서드를 여러개 정의하고 매개변수의 유형이나 개수를 다르게 하여 다양한 유형의 호출을 가능하게 해주는 방법입니다.
Q) 가상 메서드가 무엇인가요?
A) 상속받은 클래스의 인스턴스를 생성하고 묵시적으로 상위 클래스로 형변환을 해주고 메서드를 호출하면, 형변환된 클래스의 메서드가 아닌 인스턴스의 메서드가 실행됩니다. 이를 가상 메서드라고 합니다.
Q) 다형성이란?
A) 하나의 코드가 여러 자료형으로 구현되어 실행되는 것입니다.
Q) 업캐스팅과 다운캐스팅에 대해 설명해주세요.
A) 업캐스팅은 하위 클래스의 객체가 부모 클래스로 형변환 되는 것을 말합니다.
근데 업캐스팅하게 되면 하위 클래스의 메서드를 사용할 수 없기 때문에 다시 하위 클래스로 돌아갈 필요성이 생깁니다.
다운 캐스팅이란 상위 클래스로 형변환 되었던 하위 클래스를 원래 자료형으로 형변환하는 것을 말합니다.
Q) 추상 클래스란?
A) 추상 클래스는 추상 메서드를 가지고있는 클래스를 말합니다. 추상 메서드는 구현부가 없는 메서드입니다. 이러한 추상 클래스를 상속받은 클래스는 추상 메서드를 모두 구현하던가, 본인도 추상 클래스로 만들던가 해야 오류가 발생하지 않습니다.
+) 예약어 abstract를 사용합니다.
Q) final 예약어는 언제 쓰이나요?
A) final 변수는 상수가 됩니다. final 메서드는 하위 클래스에서 재정의가 불가능해집니다. final 클래스는 상속할 수 없게 됩니다.
Q) 인터페이스란? 추상클래스와 다른점은?
A) 인터페이스는 추상메서드와 상수로만 이루어져 있습니다. 구현 코드가 없기때문에 인터페이스를 인스턴스로 생성할 수는 없습니다. 인터페이스는 implements 예약어를 사용하며 인터페이스를 구현하는 클래스는 인터페이스의 추상 클래스를 전부 구현하거나 본인도 추상 클래스로 만들거나해야 오류가 나지 않습니다.
+) 인터페이스형으로 업캐스팅이 가능하기 때문에 인터페이스로도 다형성을 만들어낼 수 있습니다. 이를 통해 확장성있는 코드의 구현이 가능해집니다.
Q) 제네릭이란?
A) 어떤 값이 하나의 참조 자료형이 아닌 여러 참조 자료형을 받을 수 있도록 프로그래밍하는 것입니다. <>를 통해 작성할 수 있습니다. <>안에 들어가는 문자를 자료형 매개변수라고 부릅니다. 자료형 매개변수를 T라고 할 때, T의 자료형이 정해지는 순간은 인스턴스가 생성되는 순간입니다. 그렇기 때문에 static 변수의 자료형이나 static 메서드 내부 변수의 자료형으로는 T를 사용할 수 없습니다. static 변수나 static 메서드는 인스턴스 이전에 생성되기 때문입니다.
+) T에 사용할 자료형을 제한하기 위해 <T extends A>와 같이 상속을 받기도 합니다. 이렇게 상속을 받으면 A의 메서드를 사용할 수 있게 됩니다.
Tech Interview/Java
[자바] 자바 면접 대비 1
반응형
댓글