[TIL#6] Java 문법 종합반 4주차

Jiwoo·2024년 4월 26일
0

내일배움캠프

목록 보기
10/65
post-thumbnail

학습 내용


예외 처리

📌 오류 (Error)

  • 일반적으로 회복 불가능한 문제

📌 예외 (Exception)

  • 일반적으로 회복 가능한 문제

📌 예외 발생과 try-catch, finally 문

  • 예외 정의
class OurBadException extends Exception {
	public OurBadException() {
		super("위험한 행동을 하면 예외처리를 꼭 해야합니다!");
	}
}
  • throw

    • 메서드 안에서, 실제로 예외 객체 던질 때 사용하는 예약어
  • throws

    • 던지다! (=예외를 던지다 / 발생시키다)
    • 메서드 이름 뒤에 붙는 예약어 (여러 종류의 예외사항 적음)
class OurClass {
    private final Boolean just = true;
		
		// 신규 문법 throws!
    public void thisMethodIsDangerous() throws OurBadException {
        if (just) {
						// 신규 문법 throw!
            throw new OurBadException();
        }
    }
}

📌 예외 handling

public class StudyException {
    public static void main(String[] args) {
        OurClass ourClass = new OurClass();

        try {
            // 1. 위험한 메소드의 실행을 일단 시도!!
            ourClass.thisMethodIsDangerous();
        } catch (OurBadException e) {
            // 2. 예외가 발생하면, "잡아서" handling
            // 예외가 발생하는경우 "handling" 하는 코드가 들어가는 블럭입니다.
			// 즉 try 블럭 내의 구문을 실행하다가 예외가 발생하면
			// 예외가 발생한 줄에서 바로 코드 실행을 멈추고 (잡아!!)
			// 여기 있는 catch 블럭 내의 코드가 실행됩니다.
            System.out.println(e.getMessage());
        } finally {
            // 3. 예외의 발생 여부와 상관없이, 실행시켜야 하는 코드가 들어갑니다.
            // 무조건 여기는 거친다!!
            System.out.println("우리는 방금 예외를 handling 했습니다!");
        }

    }
}

제네릭

  • 중복되거나 필요 없는 코드 줄여주는 것
public class Generic {
    public String plusReturnFunction(int a, int b) { ... }

    public String plusReturnFunction(int a, long b) { ... }

    public String plusReturnFunction(int a, String b) { ... }
}

-> 이처럼 똑같은 로직 수행하는 함수를 세 차례나 구현 (타입 지정 위해)

  • 타입 안정성 해치지 X
public class Generic {
    public Object plusReturnFunction(Object a,Object b) { ... }
}

-> Object 사용해 타입 상관없이 두 매개변수 전달은 가능하나, 타입 안정성이 침해된다.

📌 Generic 문법

// 1. 자주 사용되는 변수명: T, U, V, E
public class Generic<T> {
	// 2. t의 타입이 들어가야 할 자리에 선언한 타입 변수 T 들어감
    private T t;
    // 3. 메서드 리턴 타입에도 마찬가지
    public T get() {
        return this.t;
    }

    public void set(T t) {
        this.t = t;
    }

    public static void main(String[] args) {
		// 4. 클래스에 선언했기에 인스턴스 만들기 위해 타입 변수에 실제 변수 값 넣음
        Generic<String> stringGeneric = new Generic<>();
		// 5. 타입 변수로 대체해둔 곳에 String 들어가 있음
        stringGeneric.set("Hello World");
				
        String tValueTurnOutWithString = stringGeneric.get();

        System.out.println(tValueTurnOutWithString);
    }
}

  • 다수의 타입 변수 사용 가능
public class Generic<T, U, E> {
    public E multiTypeMethod(T t, U u) { ... }
}


Generic<Long, Integer, String> instance = new Generic();
instance.multiTypeMethod(longVal, intVal);

  • 와일드카드 통해 제네릭의 제한 구체적으로 정함
public class ParkingLot<T extends Car> { ... }

ParkingLot<BMW> bmwParkingLot = new ParkingLot();
ParkingLot<Iphone> iphoneParkingLot = new ParkingLog(); // error!
  1. < ? extends T>: T와 그 자손들만 사용 가능
  2. < ? super T>: T와 그 조상들만 가능
  3. < ? >: 제한 X

회고

3주차 보다는 들을 만 했지만 이해한 개념을 응용하려니까 잘 안된다. 자바 왜 이렇게 어렵니

0개의 댓글