사진은 오페라 가르니에 천장 - 내가 본 어느 건축물보다도 제일 화려했다
평소에 개념으로만 배우고 실제로 많이 써보지는 않아 어렴풋이 알고만 있고 설명할 수는 없는 enum, generic 이었고, 예외 처리는 필요할 때는 많지만 그때그때 찾아보고 결국 사용하지 못할 때가 많았다. 이번 기회에 직접 코딩해보며 연습해서 앞으로 필요할때마다 쓸 수 있을 것 같다.
public static final
로 상수 선언 안쓰고 왜 enum을 사용할까?enum Colours {RED, YELLOW, BLUE, WHITE, BLACK} //보통 다 대문자
public class Main {
public static void main(String[] args) {
Colours favColour = Colours.BLUE; //열거형 사용 예시
}
}
name()
: 상수 이름 리턴ordinal()
: 열거 객체 인덱스 리턴compareTo()
: 인덱스 차이 리턴valueOf(String)
: 해당 문자열의 객체 리턴values()
: 모든 열거 객체 배열로 리턴<T>
표기 (다른 글자여도 됨!)extends
키워드 사용&
사용제네릭 메서드의 타입 매개변수 != 제네릭 클래스의 타입 매개변수
-클래스에서 사용한 타입 매개변수는 인스턴스화될 때 타입 지정됨
-메서드에서 사용한건 메서드 호출할 때 타입 지정됨
제네릭 메서드는 static 메서드에서도 타입 매개변수 사용 가능!
제네릭 메서드 정의할 때는 타입 지정 안되어있어서 String 클래스의 메서드 사용 불가능!!ㅠㅠ
=> 대신 Object 최상위 클래스 메서드들은 사용 가능! (equals(), toString(), ...)
<? extends T> //T와 T를 상속받는 하위 클래스 타입만 (상한 제한)
<? super T> //T와 T의 상위 클래스만 (하한 제한)
try {
// 예외가 발생할 수 있는 코드
}
catch (ExceptionType1 e1) {
// ExceptionType1 예외 발생 시 실행할 코드
}
catch (ExceptionType2 e2) {
// ExceptionType2 예외 발생 시 실행할 코드
}
finally {
// 예외 발생 상관없이 항상 실행
}
=> 실행 결과
throws
키워드 : 예외 호출한 곳으로 다시 떠넘기기throw
키워드 : (없는) 예외 만들기
throws
static void throwException() throws ClassNotFoundException, NullPointerException {
//함수 내용
}
throw
try {
Exception intendedException = new Exception("의도된 예외 만들기");
throw intendedException;
} catch (Exception e) {
System.out.println("고의로 예외 발생시키기 성공!");
}
List : 순서 ⭕ , 중복 ⭕
Set : 순서 ❌ , 중복 ❌
Map : (key, value) 쌍 , 순서 ❌ ,
-> key - 중복 ❌ , value - 중복 ⭕
ㅇㅇ