Question 23/08/17

song yuheon·2023년 8월 27일
0

Question

목록 보기
2/6
post-thumbnail

Q1. 아래 코드에서 throws 사용 이유는?

private final boolean just = true;

    // throws : 던지다!! ( = 예외를 던지다 / 발생시키다.)

    public  void thisMethodIsDangerous() throws OurBadException{
        // custom logic

        if(just){
            throw new OurBadException();
        }
    }
    
    
    public OurBadException(){
        super("위험한 행동 예외 처리");
    }    

A. throws 사용하면 해당 메서드 호출하는 곳에서 예외 처리 강제화.

    public static void main(String[] args) {
        OurClass ourClass = new OurClass();
        try{
            ourClass.thisMethodIsDangerous();    
        }catch (OurBadException e){
            System.out.println(e.getMessage());
        }finally {
            
        }
    }

Q2. 디테일한 예외사항 사용 이유?

A.
1. 문제 발생시 원인 빠르게 파악 가능.
2. 개발자 간 이해 쉬워 협업 향상.
3. 시스템 안전성 보장.


Q3. throws 사용해서 메서드 위험성 알리는 이유?

A. 개발자 협업 및 시스템 안정성 향상. 예외 원인 파악 용이.


Q4. checked exceptionunchecked exception으로 포장 이유?

A. 코드 간결성 위해 및 예외 처리 자율화.


Q5. 연결된 예외 어떻게 여러 예외 함께 처리?

public class main {

    public static void main(String[] args) {
        try {
            // 예외 생성
            NumberFormatException ex = new NumberFormatException("가짜 예외이유");

            // 원인 예외 설정(지정한 예외를 원인 예외로 등록)
            ex.initCause(new NullPointerException("진짜 예외이유"));

            // 예외를 직접 던집니다.
            throw ex;
        } catch (NumberFormatException ex) {
            // 예외 로그 출력
            ex.printStackTrace();
            // 예외 원인 조회 후 출력
            ex.getCause().printStackTrace();
        }

        // checked exception 을 감싸서 unchecked exception 안에 넣습니다.
        throw new RuntimeException(new Exception("이것이 진짜 예외 이유 입니다."));
    }
}

A. 예외 함께 처리는 여러 예외 유형 동일 처리 로직 필요할 때 의미. 해당 코드는 NumberFormatExceptionNullPointerException 함께 처리.


Q6. chained Exception 정의?

A. 한 예외의 원인이 다른 예외일 때, 두 예외 연결 기능.


Q7. 예외를 다른 예외로 변환 이유? 그리고 왜곡 위험은?

public void someMethod() throws IOException { ... }

public void someResponsibleMethod() throws MoreSpecificException {
		try {
			this.someMethod();
		} catch (IOException e) {
			throw new MoreSpecificException(e.getMessage());
		}
}

A.
1. 예외 추상화해서 협업 도움.
2. 기존 에러 설명 추가 위해.


Q8. 제네릭 클래스 생성 가능?

A. 클래스 뒤에 <> 붙이면 제네릭 클래스.

public class Box<T> {
    private T item;
}

Q9. 제네릭 배열 생성 및 static 사용 안되는 이유?

A. 배열은 고정 타입, 제네릭은 컴파일 타임에만 타입 정보. static은 클래스 수준 동작, 인스턴스 제네릭 타입 정보 알 수 없음.


Q10. 제네릭 E 사용 시기?

A.
E = Element, 주로 컬렉션 내부 요소 표현.


Q11. 아래 코드 동작 방식은?

static <T> void sort(List<T> list, Comparator<? super T> c) { ... }
<T>: 'T'는 아직 정해지지 않은 데이터 유형을 나타냄
  나중에 함수를 호출할 때 'T'가 무엇인지 알 수 있음
  예를 들어 숫자, 문자열, 어떤 객체든 가능

List<T> list: 'T' 유형의 아이템을 담은 리스트
  예를 들어, T가 숫자면 숫자 리스트, T가 문자열이면 문자열 리스트

Comparator <? super T> c
이는 'T' 유형의 아이템 두 개를 비교하여 어느 것이 먼저 오고, 어느 것이 나중에 올지를 결정하는 규칙

? super T: 이 부분은 T 또는 T의 부모 유형을 다룰 수 있는 비교 규칙을 사용가능
예를 들어, T가 특정 클래스의 서브클래스라면, 그 서브클래스 뿐만 아니라 부모 클래스를 비교하는 규칙도 사용 가능

<T>는 함수 호출되며 매개변수의 타입이 확정될때 해당 매개변수의 타입으로 바뀐다 
만약 타입들이 일치하지 않으면 컴파일 에러가 난다.

A.
<T> 표시는 아직 확정되지 않은 데이터 유형. List<T> listT 유형 아이템 리스트. Comparator <? super T> cT 아이템 비교 규칙.
T = type
E = Element
K = Key
N = Number
V = Value
R = Result
https://kang-james.tistory.com/entry/JAVA-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0-%EC%A0%9C%EB%84%A4%EB%A6%ADGeneric-%EC%99%84%EB%B2%BD-%EC%A0%95%EB%A6%AC


Q12. 아래 코드에서 Parser 반환 필요?

 public Parser parseFirstNum(String firstInput) throws Exception{
        if (!Pattern.matches(NUMBER_REG, firstInput)) {
            throw new BadInputException("정수값");
        }


        this.calculator.setFirstNumber(Integer.parseInt(firstInput));

        return this;
    }

A. 메소드 체이닝 위해 반환 사용. 그러나 코드에서 독립적 호출이므로 반환 필요 없음.

method1().method2().method3()
        System.out.println("첫번째 숫자를 입력해주세요!");
        String firstInput = scanner.nextLine();
        parser.parseFirstNum(firstInput);

        System.out.println("연산자를 입력해주세요!");
        String operator = scanner.nextLine();
        parser.parseOperator(operator);

        System.out.println("두번째 숫자를 입력해주세요!");
        String secondInput = scanner.nextLine();
        parser.parseSecondNum(secondInput);

Q13. 전역변수, 정적 변수, 배열 저장 위치?

A. 전역변수와 정적 변수는 메모리의 Heap 영역에 저장. 배열도 Heap 영역에 저장.


Q14. Runnable 인터페이스 vs Thread 클래스?

A.
Runnable: 실행할 작업 정의 위한 인터페이스.
Thread: 스레드 동작 제어 및 생성 위한 클래스. Runnable 객체 받을 수 있음.


Q15. 가비지 컬렉터 무엇?

A. 사용하지 않는 메모리 자동 회수 시스템. 자바에서 더 이상 참조되지 않는 객체 메모리 회수.


profile
backend_Devloper

0개의 댓글