공부/JAVA

[java] 정석코딩 자바 문제 오답노트

junani0v0 2024. 4. 4. 14:33

java 시험문제.docx
0.03MB

 

1. 객체지향 개념의 4대 핵심개념에 대해서 적고 한 줄로 설명하시오.

     상속 : 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것

     다형성 : 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 한 것

     캡슐화 : 외부로부터 데이터 보호(메서드를 통한 외부접속은 허용)

                      외부에는 불필요한, 내부적으로만 사용되는 부분을 감춤(복잡도 낮춤)

     추상화 : 클래스 간의 공통점을 찾아내서 공통의 조상을 만드는 작업, 구체적이지 않게 하는 것

 

2. 오버로딩 조건 3가지 적으시오.

     메서드 이름이 같아야 한다

     매개변수의 개수 또는 타입이 달라야 한다.

     반환타입 영향 받지 X

 

3. 오버라이딩의 조건 3가지를 적으시오

     선언부가 같아야 한다. (이름, 매개변수, 반환타입 같아야 한다)

     접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.

     조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

 

4. 생성자의 조건 4가지를 적으시오.

     생성자의 이름은 클래스의 이름과 같아야 한다

     생성자는 리턴 값이 없음( void 붙이지 X )

     모든 클래스에는 반드시 하나 이상의 생성자가 정의

     한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출 가능

     클래스에 생성자가 하나도 없는 경우 컴파일러가 자동적으로 기본생성자를 추가

     생성자의 이름으로 클래스이름 대신 this( )를 사용

 

5. 다형성의 장점 두가지를 적으시오

     조상타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다. 다형적 매개변수

     참조변수의 타입에 따라 사용할 수 있는 멤버의 개수를 조절할 수 있다

     -----

     매개변수의 다형성 : 참조형 매개변수는 자신과 같은 타입 또는 자손 타입의 인스턴스를 넘겨줄 수 있다

     여러 종류의 객체를 배열로 다루기 :  조상 타입의 객체배열에 자손들의 객체를 넣을 수 있다

 

6. 추상화에 대해서 아는 대로 기술하시오.

기존의 클래스의 공통부분을 뽑아내서 공통의 조상 클래스로 만드는 것

 

7. 불변(immutable)에 대해 아는 대로 적으시오.

한번 생성된 String인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고, 변경불가

값의 저장이 기존 인스턴스가 아닌 새로운 문자열이 담긴 String인스턴스가 생성

 

8. 추상 클래스와 인터페이스의 차이에 대해서 적으시오.

iv사용여부

추상클래스는 추상메서드를 포함하고 있는 일반클래스, 인스턴스 생성 불가, 단일상속가능

인터페이스는 껍데기로 오직 추상메서드와 상수만을 멤버로 가질 수 있다. 다중상속가능

 

9. Object클래스가 iv가 하나도 없는데도, 인스턴스 메서드를 가지는 이유는?

     this == obj ; : thisiv 취급

     Object는 최고조상 클래스로 자손들이 오버라이딩하기에 인스턴스 메서드를 가진다

 

10. 컬렉션 프레임웍의 핵심 인터페이스 3개를 적고 각 특징을 적으시오.

     List : 순서 O, 중복 O -> 순서가 있는 데이터 집합, 데이터의 중복을 허용한다

     Set : 순서 X, 중복 X -> 순서를 유지하지 않는 데이터의 집합, 데이터 중복 허용 않는다

     Map : (,)의 한쌍으로 저장되며 키는 순서X, 중복X 값은 순서X, 중복O

 

11. 클래스 변수와 인스턴스 변수의 초기화의 순서와 과정에 대해서 설명하시오.

클래스 변수 초기화 [ 기본값(자동 초기화 0) ->명시적 초기화(간단 초기화 =) ->클래스 초기화 블록(복잡 초기화 static{ } ) ] -> 인스턴스 변수 초기화 [기본값(자동 초기화 0) ->명시적 초기화(간단 초기화 =) -> 인스턴스 초기화 블록(복잡 초기화 { } ) -> 생성자 (복잡 초기화 생성자( ){ } ) ]

 

12.예외처리 방법에 4가지에 대해서 모두 설명하시오.

     try-catch(직접처리)

     예외선언하기 (throws) : 호출한 곳으로 던져서 호출한 곳에서 처리

     호출한 메서드와 호출된 메서드 양쪽에서 예외처리 (예외되던지기)

     은폐 (catch문에서 끝) : try catch문 사용해주고 catch문안에 아무것도 적지X

 

13. 연결된 예외의 장점 2가지에 대해서 적으시오

     예외를 단순화(그룹화) : 여러가지 예외를 하나의 큰 분류의 예외로 묶어서 다루기 위해

     checked예외(필수) unchecked(선택)로 변경할 수 있다

 

14. 오류의 종류 3개를 적고 설명하시오

     컴파일 에러 : 컴파일 시에 발생하는 에러(덜 심각)

     런타임 에러 : 실행 시 발생하는 에러(비정상 종료됨)

     논리적 에러 : 실행은 되지만, 의도와 다르게 동작하는 것((비정상 종료되지 않음 )(제일 심각한 에러, 문제점 발견과 수정이 힘듦)

 

15. 인터페이스의 장점에 대해서 아는 대로 적으시오.

     개발시간을 단축시킬 수 있다.

     표준화가 가능하다. ex)JDBC ->인터페이스 집합

     서로 관계없는 클래스들에게 관계를 맺어줄 수 있다.

     독립적인 프로그래밍이 가능하다. = 선언부와 구현부 분리

     두 객체 간의 연결다리 역할

     변경에 유리한 설계 가능

 

16. 얕은 복사와 깊은 복사에 대해 아는 대로 적으시오.

ex) class Point { int x; int y; }

class Circle Point p(//포함관계) { int z; }

- 얕은 복사 : 값을 공유, 수정하면 원본 바뀜. 읽기를 할 때 주로 사용 복사 시간이 빠름

참조변수가 가리키는 첫번째 것 까지만

- 깊은 복사 : 값을 개별로 가진다 수정해도 원본에 문제 X, 쓰기를 할 때 주로 사용, 복사 시간이 느림

(하위까지 복사(계속 추가))

 

17. 접근 제어자 4개를 가장 넓은 범위부터 순서대로 적고 각 접근 범위를 적으시오

     public       : 제한 없음

     protected : 같은 클래스, 같은 패키지, 자손 클래스 접근 가능

     (default) : 같은 클래스, 같은 패키지 접근 가능

     private : 같은 클래스 접근 가능

 

18. 제어자 final이 붙을 수 있는 모든 대상의 종류를 적고, 각 경우의 의미를 적으시오

     클래스 : 변경될 수 없는 클래스, 확장될 수 없는 클래스, 다른 클래스의 조상 X

     메서드 : 변경될 수 없는 메서드, 오버라이딩을 통해 재정의 X

     변수(iv, lv) : 변수 앞에 final붙으면, 값을 변경할 수 없는 상수가 된다

 

19. 객체지향 개념을 프로그래밍에 도입하게 된 가장 큰 이유를 간단히 적으시오

변경에 유리하게 하기 위해

코드의 재사용성이 높고 유지보수가 용이하다(유지보수 시간과 비용 절감)

     코드의 재사용성이 높다 : 기존의 코드를 이용하여 새코드를 쉽게 작성 가능

     코드의 관리가 용이하다 : 코드 간의 관계를 이용해 적은 노력으로 쉽게 코드 변경가능

     신뢰성이 높은 프로그래밍이 가능하다 : 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오작동 방지

 

20. Class객체에 대해서 아는 대로 적으시오.

클래스의 모든 정보를 담고 있는 객체, 객체 생성하고 메서드를 호출하는 등 보다

동적인 코드를 작성할 수 있다. 클래스파일이 로딩될 때 생성되어 객체 생성 정보 가져오기 등의 기능 제공

21.HashMap의 해시함수가 동작하는 방식에 대해서 설명하시오

검색하고자 하는 값의 키로 해시함수를 호출한다

해시함수의 계산결과(해시코드)로 해당 값이 저장되어 있는 링크드 리스트를 찾는다

링크드 리스트에서 검색한 키와 일치하는 데이터를 찾는다

 

22. Comparator Comparable의 차이에 대해서 설명하시오

Comparator 기본 정렬기준 외에 다른 기준으로 정렬하고자 할 때 사용

Comparator 기본 정렬기준을 구현하는데 사용

 

23.Properties에 대해서 간단히 설명하시오

 HashMap의 구버전인 Hashtable을 상속받아 구현한 것으로, Hashtable은 키와 값을(Object, Object)의 형태로 저장하는데 비해 Properties(String, String)의 형태로 저장하는 보다 단순화된 컬렉션 클래스이다

 주로 환경설정과 관련된 속성(property) 저장에 사용되며 데이터를 파일로부터 읽고 쓰는 편리한 기능을 제공

 

24.지네릭스의 와일드 카드가 무엇이며 왜 사용하는지 적으시오

지네릭 타입이 다른 것만으로는 오버로딩이 성립하지 않기 때문에 메서드 중복 정의가 된다 이럴 때 여러 개 타입을 사용하기 위해 고안된 것이 와일드 카드이다 와일드 카드는 기호?로 표시하며 extends super로 상한과 하한을 제한할 수 있다

<? extends T> 와일드카드의 상한 제한, T와 그 자손들만 가능

<? super T> 와일드카드의 하한 제한, T와 그 조상들만 가능

<?> 제한 없음, 모든 타입이 가능. <? extends Object>와 동일

 

25.클래스에 사용된 지네릭 타입 T가 있을 때, 클래스 내에서 T를 사용할 수 없는 경우는?

 static T  ->T는 인스턴스변수로 간주되기에 static멤버에 사용할 수 없다

 new T[ ] ->지네릭 타입의 배열을 생성X : new연산자는 컴파일 시점에 정확한 타입이 필요, T는 타입 불명확

 

26.자바에서 제공하는 표준 애너테이션(메타 애너테이션 포함)을 아는 대로 적고 간단히 설명하시오

@Override : 메서드 앞에만 붙일 수 있는 애너테이션으로, 조상의 메서드를 오버라디딩하는 것이라는 걸 컴파일러에게 알려주는 역할을 한다

@Deperecated : 이 애너테이션이 붙은 대상(필드, 메서드)은 다른 것으로 대체되었으니 더 이상 사용하지 않을 것을 권한다는 의미이다

@Funcionallnterface : 이 애너테이션을 붙이면 컴파일러가 함수형 인터페이스를 올바르게 선언했는지 확인하고, 잘못된 경우 에러를 발생시킨다.

@SuppressWarnings : 컴파일러가 보여주는 경고 메시지가 나타나지 않게 억제해준다

@SafeVarargs : ‘unchecked’경고를 억제하기 위해 사용, static이나 final이 붙은 메서드와 생성자에만

붙일 수 있음, 즉 오버라이드될 수 있는 메서드에는 사용할 수 없다

메타 애너테이션 : 애너테이션을 만들 때 사용, ‘애너테이션을 위한 애너테이션, 애너테이션에 붙이는 애너테이션으로 애너테이션을 정의 할 때 애너테이션의 적용대상(target)이나 유지기간(retention)등을 지정하는데 사용

@Target : 애너테이션이 적용가능한 대상을 지정하는데 사용

@Retention : 애너테이션이 유지되는 기간을 지정하는데 사용 (애너테이션의 유지정책 종류 아래 3가지)

        SOURCE : 소스파일에만 존재. 클래스파일에는 존재하지 않음

         CLASS : 클래스 파일에 존재. 실행 시에 사용불가(기본값)

         RUNTIME : 클래스 파일에 존재. 실행 시 사용가능

@Documented : 애너테이션에 대한 정보가 javadoc으로 작성한 문서에 포함되도록 한다

@Inherited : 애너테이션이 조상클래스에 붙이며, 자손 클래스도 이 애너테이션이 붙은 것과 같이 인식(상속)

@Repeatable : 애너테이션을 여러 번 반복해서 쓸 수 있게 한다

27. 프로세스와 쓰레드에 대해서 아는 대로 쓰시오

 프로세서 : 실행 중인 프로그램으로 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)를 할당 받음

 쓰레드 : 프로세서의 자원을 이용해서 실제 작업을 수행하는 일꾼

 

28. 쓰레드를 제어하는 메서드 7개를 모두 쓰고, 간단히 설명하시오

static void sleep(long millis) : 지정된 시간동안 쓰레드를 일시정지 시킨다. 지정한 시간이 지나면

자동적으로 다시 실행대기상태가 된다

void join( ) : 지정된 시간동안 쓰레드가 실행하도록 한다. 지정된 시간이 지나거나 작업이 종료되면

join( )을 호출한 쓰레드로 다시 돌아와 실행을 계속한다.

void interrupt( ) : sleep( )이나 join( )에 의해 일시정지상태인 쓰레드를 깨워서 실행대기상태로 만든다.

해당 쓰레드에서는 InterruptedException이 발생함으로써 일시정지상태를 벗어나게 된다.

void stop( ) : 쓰레드를 즉시 종료 시킨다

void suspend( ) : 쓰레드를 일시정지 시킨다. resume( )을 호출하면 다시 실행대기상태가 된다.

void resume( ) : suspend( )에 의해 일시정지상태에 있는 쓰레드를 실행대기상태로 만든다

static void yield( ) : 실행 중에 자신에게 주어진 실행시간을 다른 쓰레드에게 양보하고 자신은

실행대기상태가 된다

static 붙이는 이유 : 자기 자신에게만 동작할 수 있기 때문 (잠자기 양보는 남에게 못 시킨다)

29. (lock)의 종류 3가지를 적고 간단히 설명하시오

ReentrantLock : 재진입이 가능한 lock. 가장 일반적인 베타 lock

           Mutex Lock 배타적 락 : 락이 걸렸나 안 걸렸나 확인 후  true, false로 나타냄

ReentrantReadWriteLock : 읽기에는 공유적이고, 쓰기에는 배타적인 lock

           Semaphore Lock 공유적 락 : 읽을 때 다른 사람도 읽을 수 있게 한다

StampedLock : ReentrantReadWriteLock에 낙관적인 lock의 기능을 추가

           Optimistic Lock 낙관적 락 : 순서 바꾸기. 읽기 먼저하고 lock이 걸렸는지 확인

 

30. 블락킹(blocking)이 무엇이며, 언제 발생하는지 설명하시오

블락킹은 사용자가 입력을 완료하는 동안 진행이 막혀 기다리는 것을 말한다(주로 싱글 쓰레드 프로세스에 발생)

사용자로부터 데이터를 입력 받는 작업, 네트워크로 파일을 주고받는 작업, 프린터로 파일을 출력하는 작업과 같은 외부기기와의 입출력을 필요로 하는 경우 발생한다

멀티 쓰레드 프로세스는 기다리는 동안 다른 작업을 처리할 수 있다