기본설계도
추상 클래스와 비슷하게 다른 클래스를 작성하는데 도움을 주는 목적으로 작성
다중 상속 구현 가능
추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스
미완성 설계도
객체 생성 불가능
클래스 앞에 abstract 예약어를 사용하여 선언부만 작성
우선 공통점은 추상메서드를 사용할수있다는것
가장 큰 차이점은 사용용도
다중상속 가능 여부에따라 달라짐
자바의특성상 클래스는 한번의 상속만 가능하여 해당 클래스 구분을
추상클래스를 통해 해결할수있다
Exception(예외)란?
-입력값에 대한 처리가 불가능하거나 프로그램 실행 중에 참조된 값이 잘못된 경우 등등
정상적인 프로그램의 흐름에 어긋나는것
명시적인 예외처리를 강제하면 -> checked
RuntimeException의 하위클래스가 아니면서 Exception 클래스의 하위클래스
반드시 에러를 처리해야하는 특징을 하지고있음
(ry~catch 로 예외를 잡거나 throw로 호출한 메소드에게 예외를 던져야한다)
존재하지않은 파일을 입력했을때
실수로 클래스의 이름을 잘못 적었을때
명시적인 예외처리를 강제하지않기때문에 Unchecked
RuntimeException의 하위클래스
체크예외와는 달리 에러 처리를 강제하지않음
말그래도 실행중(runtime)이 발생할수 있는 예외를 의미
-배열의 범위를 벗어난 경우(ArrayIndexOutOfBoundsException)
정적필드와 정적 메소드라고 함
이 둘을 합쳐 정적 멤버라고 부름
객체에 소속된 멤버가 아닌 클래스에 고정된 멤버
클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할때 클래스 별로 관리됨
final 필드는 초기값이 저장되면 최종값이 되어 수정할수없다
초기화는 한번만 가능
final 필드 정의
final int number=1; //final 타입 필드[=초기값]
final은 클래스, 메서드 ,변수에 각각 붙을수있다
final이 붙어있는 클래스는 상속을 할수없음
데이터 타입을 일반화한다는 것을 의미
클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일시 미리 저장
장점?
1.클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일수있다
2.반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일수있다
class MyArry <T>{ T element; void setElement(T element) {this.element=element} T getElement() {return element;}
T는 타입변수 임의의 참조형 타입
와일드 카드란? 이름에 제한을 두지 않음을 표현하는데 사용하는 기호
자바의 제네릭에서는 물음표 ? 기호를 사용하여 이러한 와일드 카드를 사용할수있다
<?> // 타입 변수에 모든 타입을 사용할 수 있음. <? extends T> // T 타입과 T 타입을 상속받는 자손 클래스 타입만을 사용할 수 있음. <? super T> // T 타입과 T 타입이 상속받은 조상 클래스 타입만을 사용할 수 있음.