2020. 11. 14. 22:46ㆍ카테고리 없음
JAVA 언어에 대한 질문 -> 자바의 모든 것!
(자바 기술면접 준비 검색하면 나오는 답변들 위주)
1. 추상클래스와 인터페이스의 차이 및 존재 이유
추상클래스는 추상메소드가 하나 이상 포함되거나 abstract 로 정의된 경우를 말합니다. (extends 로 구현)
인터페이스는 모든 메소드가 추상 메소드인 경우입니다. (implements로 구현)
목적
추상클래스는 추상 클래스를 상속받아 기능을 이용하고 확장시키는 데 있고,
인터페이스는 함수의 구현을 강제하기 위해 함수의 껍데기만 있는 것입니다.
2. 자바란? , 자바언어의 특징
- 객체지향 프로그램밍 언어이다.
- 운영체제의 종류에 상관없이 실행가능하다. JVM 위에서 실행되기 때문입니다.
- 멀티쓰레드를 지원합니다. , 여러 쓰레드에대한 스케줄링은 자바 인터프리터가 담당합니다.
- 단점: 속도문제가 대표적인데, 바이트코드를 기계어로 바로 변환해주는 JIT컴파일러와 Hotspot같은 신기술 도입으로 JVM 기능이 향상되어 속도문제가 상당히 개선되었습니다.
3. 명시적 변환과 묵시적 형변환의 차이
자바의 형변환은 서로 다른 2개의 타입을 연산할떄 하나의 타입으로 일치시키기 위해서 합니다.
형변환은 앞에 변수나 리터럴앞에 변환하고자 하는 타입을 괄호와 함께 붙여줘서 구현합니다.
명시적 형변환은
큰 크기의 타입을 작은 크기의 타입으로 변경할 경우 앞에 타입을 명시해줍니다.
묵시적 형변환은
작은 크기의 타입은 큰크기의 타입으로 java 컴파일러에 의해 자동형변환된다.
즉, int 와 double 을 연산할때 더 큰 저장범위를 갖는 double 로 값을 도출한다면, 개발자는 추가적인 작업을 할필요없습니다.
java의 컴파일러가 기존의 값을 최대한 보존할수있는 타입으로 자동 형변환하기 때문입니다.
하지만, 더 작은 값인 int 로 값을 도출하고 싶을때는 개발자가 double 앞에 (int) 를 붙여주므로써 int 값을 도출할 수있습니다. 이를 명시적 형변환이라고합니다.
4. 자바에서 메모리가 어떻게 되지?
Method Area, Call Stack , Heap 으로 구성되있는데,
Method Area: 프로그램 실행 중 어떤 클래스가 사용되면 클래스 정보(static 변수, 전역 변수)를 이곳에 저장합니다. 클래스의 변수도 영역에 함께 생성됩니다.
Heap: new 연산자를 통한 객체가 생성되는 공간 , 프로그램 중 생성되는 객체는 모두 이곳에서 생성됩니다.
Call Stack : 메서드의 작업에 필요한 메모리 공간을 제공합니다.
메서드 작업 수행하는 동안 지역변수들과 연산의 중간결과를 임시저장합니다.
메서드 작업을 마치면 할당된 공간은 반환되어 비워집니다.
호출 스택의 제일 상위에 위치하는 메서드가 현재 진행중인 메서드이며, 나머지는 대기상태에 있게 된다.
아래에 있는 메서드가 바로위의 메서드를 호출한 메서드다.
5. 자바 스레드에 대해 설명해봐라
자바에는 프로세스가 존재하지않고 스레드만 존재하며,
스레드는 JVM 에 의해 스케줄링 되는 실행단위 코드 블록이다.
- 자바의 모든 스레드는 java.lang.Thread 클래스 객체에 의해 생성되고 제어된다.
쓰레드를 구현하기 위한 방법은 ?
- Runnable 인터페이스 구현
- run 함수를 구현해야한다.
- Thread 타입 객체를 만들때, Thread 의 생성자에 Runnable 객체를 인자로 넘겨야한다.
- 생성한 Thread 객체의 start 메서드를 호출한다.
- Thread 클래스 상속
- Thread 클래스를 상속받아 구현
- Runnable 이 Thread 보다 선호되는 2가지 이유가 있다.
- 자바는 다중상속이 지원되지 않아서 Thread 클래스 상속시 하위클래스는 다른 클래스를 상속할 수없다. 하지만, Runnable 인터페이스를 구현하는 클래스는 다른 클래스를 상속할 수있다.
- Thread 의 모든것을 상속받는 것이 부담될 때 Runnable을 구현하는 편이 낫다.
쓰레드 코드 : extends 를 이용해서 ,
run을 오버라이드 하지만 실행시에는 start를 쓴다.
https://reakwon.tistory.com/m/84
6. final 이란?
변경될 수없는 대상에 제어자 final 을씁니다.
- class는 다른 클래스의 부모가 될 수 없습니다.
- 메서드는 오버라이딩을 통해 재정의 될 수 없습니다.
- 멤버변수나 지역 변수는 값을 변경 할 수 없습니다.
6-1. static 이란?
static 멤버 변수(클래스변수)는 인스턴스에 관계없이 같은 값을 갖는다.
- 멤버변수는 클래스가 메모리에 로드될때 생성된다.(Method 영역)
- 클래스변수를 초기화 할때 주로 사용된다.
- 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.
7. 클래스와 인스턴스의 차이
클래스는
정의: 객체를 정의 해놓은 것이다. ex) Tv설계도 , 객체는 TV제품
용도: 객체를 생성할때 사용된다.
인스턴스는
클래스로부터 만들어진 객체를 클래스의 인스턴스하고 한다.
(new 를 이용해 생성한다.
Tv t; //Tv 클래스 타입의 참조변수 t선언)
t= new Tv(); // Tv 인스턴스 생성 해서 t에 저장
8. 자바 커넥션 풀이란?
웹 컨테이너(WAS)가 db 와 연결하는 커넥션을 미리 생성해두고 풀에 저장해두었다가 필요할 때 꺼내쓰고 ,
사용후에는 다시풀에 반환하는 기법이다.
장점: 커넥션을 미리 생성해두어 커넥션 사용시 매번 생성하는 것보다 빠른 속도를 보장한다.
주의할점: 유저가 많아져 커넥션이 모자랄 경우 원활한 서비스가 안될 수있다.
따라서, 유저 수에 따라 커넥션을 조절할 필요가 있다.
커넥션도 객체라서 메모리를 차지하게 된다.
-> 즉, WAS 에 커넥션 풀을 크게 설정하면, 메모리 소모가 큰대신 많은 사용자가 대기시간이 줄어들고, 반대로 커넥션 풀을 적게 설정하면 그만큼 대기 시간이 길어진다.
9. 에러(Error)와 예외(Exception) 차이
에러: 프로그램 코드에서 수습될 수 없는 심각한 오류 / 발생시 수습이 안됩니다. ex) 메모리 부족, stack overflow
예외는 프로그램 코드에 의해서 수습될수 있는 다소 미약한 오류 / 프로그래머가 try catch문으로 예외처리를 작성하여 비정상적인 종료를 막을 수있다. ex) FileNotfoundException , NullpointerException
10. 예외처리에 대해서 설명해봐라 - try catch와 throw
예외처리 방식은 3가지로,
- try catch
- throws
- throw
가 있습니다.
try catch:
예외가 발생할 만한 위치를 try 로 감싸주고, 예외 상황에 따라 catch 에서 처리하게된다.
throws는 호출한 곳에서 예외처리를 해주는 것입니다. call method를 호출했다면 call method 정의 선언옆에 throws 예외명을 써줍니다.
throw는
throw new 예외클래스명 을 써주고
예외 클래스 안에서 처리를 해주는 것입니다.
11. 객체지향 절차지향 차이와 언어 예시
절차지향
정의: 절차 지향은 위에서 아래로 순차적인 처리가 실행되고, 도중 함수를 만나면 타고 들어가서 진행되는 방식의 프로그래밍
장점: 컴퓨터 처리구조와 유사해 실행속도가 빠르다.
단점: 개발이 오래걸리고, 재사용이 어렵다.
ex) c언어
객체 지향
컴퓨터 프로그램을 객체들의 모임으로 파악해 객체간 서로 상호작용을 통해 실행되는 프로그래밍
장점: 코드의 재사용성이 높고 유지보수가 용이하다.
단점: - 처리속도가 절차지향보다 느리다.
설계에 많은 시간소요가 들어간다.
ex) java
12. 가상함수가 뭔지 말해주세요.
오버라이드된 함수를 호출하는 방식으로
객체 타입을 보고 어떤 메소드가 호출될것인지 결정하는 것을 가상 함수라고 한다.
if(){
person = new 학생();
}else{
person = new 직장인();
}
person.intro();
person.intro 의 호출 내용은 person 이 학생이나 직장인에 따라 다르다. intro 를 가상함수라 할수있다.
13. Servlet 관련 질문 -> mangkyu.tistory.com/14
Servlet이란?
- java를 사용해서 웹을 만들기 위해 필요한 기술입니다.
즉, 클라이언트의 Request에 결과를 반환하는 역할을 해주는 자바 프로그램입니다.
JSP(Java Server Page)는 Java코드가 들어가 있는 HTML 코드
서블릿은 자바코드 속의 HTML 코드가 들어가는 형태지만, JSP 는 반대로 HTML 코드 속에 자바소스코드가 들어가는 구조를 갖는 웹앱 프로그래밍 기술이다.
14. Python 과의 차이점
JAVA는 정적 타이핑으로 객체의 Type을 선언해주어야하며, 안하면 컴파일 오류를 발생시킨다.
Python 에서 변수는 고정된 타입을 가지고 있지 않다.
JAVA 는 다중상속이 안되지만, Python 은 다중상속이 가능하다.