(*본 게시물은 본인이 교육을 통해서 배우는 내용을 정리하는 글입니다. 부족한 부분이 많으니 참고해주시기 바랍니다. 혹시 정확한 의미를 알고 싶으시거나, 틀린 내용에 대해 조언해주시고 싶은 분들께서는 댓글을 남겨주시면 최대한 빠르게 답변하겠습니다. 감사합니다.
- Review - 다형성
- 상속관계
- 다형적 객체
- 다형적 객체는 선언하는 타입과 생성하는 타입이 다르다.
- 선언은 부모클래스 - class, abstract class, interface(모든 method가 다all 추상 method)
- 생성은 자식클래스 - class
- 이종모음
- 서로 다른 타입들의 집합(배열)이 가능
- 배열 타입을 부모클래스로 선언하고 자식클래스 타입의 객체들을 저장
- 기본타입도 저장할 수 있게 하기 위해서 wrapper class를 지원(jdk 1.4 이하)
- 기본타입을 객체타입으로 변환
- jdk 1.5 이상은 Auto-Boxing 지원
- VMI ( Virtual Method Invocation )
- 컴파일시에는 선언한 클래스의 메서드 유무를 확인(메서드 시그니처의 유무만 확인)
- 런타임시에 객체를 생성해서 참조하는 클래스의 메서드를 실행(호출)
- 예. Object obj = new Circle();
obj.draw(); //컴파일시에 에러. Object에는 draw() 메서드가 없기때문에.
이런 경우에는 draw() 메서드가 존재하는 객체 타입으로 형변환 해줘야한다.
(Circle클래스나 draw() 메서드를 가진 부모클래스로 형변환)
- Interface 인터페이스
- UML 표기법
- 기능의 명세 : 인터페이스의 메서드는 추상메서드
- 비교
- 클래스 : 상속 O, 객체 생성 O
- 추상클래스 : 상속 O, 객체 생성 X
- 구현된 메서드, 구현 안 된 메서드를 모두 가질 수 있다.
- 인터페이스 : 구현, 객체 생성 X
- 인터페이스를 구현한 자식클래스에서 인터페이스의 모든 메서드를 구현해주어야 한다.
- 오직 구현되지 않은 메서드만 가질 수 있다.
- 용도: 내가 어떤 기능이 있다고 외부로 알려주는 역할.
- 누가 사용하는가? Interface의 이해관계자.
- to 개발자, Interface의 어떤 기능을 사용하는 사람. 메서드 원형을 보고 사용만 한다.
"구현은 어딘가에 되어있으니깐 신경쓰지말고 코딩하세요."
Association - to 벤더, Interface를 만드는 사람. Interface의 메서드를 구현하는 사람. (메소드 속을 채운다.)
Realization - 위의 둘 사이에 표준을 정해주는 사람이 필요하다. Interface를 정의하는 사람.
- to 개발자, Interface의 어떤 기능을 사용하는 사람. 메서드 원형을 보고 사용만 한다.
- 선언 - interface
- 구현 - implements, 구현해주는 사람이 벤더(Interface를 만드는 사람)
- 멤버
- UML 표기법
- 내부클래스
- Inner Class
- (Instance) Inner Class
- Static Inner Class
- static이 붙은 Inner Class
- Top level class로 사용된다. = 정적 메서드나 정적 멤버를 갖는 클래스
- Local Class
- method안에서 정의되어 있는 class - Local 클래스
- 인자(argument)값으로 정의 - Anonymous class
- Local Interface
- Anonymous Class와 함께 사용 될 수 있다.
- 접근제한자 public, protected, package friendly, private 모두 사용 가능.
- Inner Class
- 예외
- 정의
- mild한 에러(가벼운 에러)
- 예시
- 파일오픈을 하려하는데 파일이 없는 경우
- 네트워크 연결이 잠시 중단된 경우
- 배열의 범위를 넘어선 data 참조
- 상속관계
- Throwable
- Error
- Exception
- Throwable
- 처리
- try~catch
- 예외의 원인이 본일일 경우 처리하는 것.
- try블럭에서는 예외가 발생할 가능성이 있는 문장들을 넣는다. 실행 완료를 보장하지 않는다.
- catch블럭은 예외가 발생하면 실행된다.
- fianlly블럭은 예외가 발생해도, 안해도 항상 실행하는 블럭이다.
리소스를 반납해야 하는 경우 finally블럭에 넣어준다.
- throws
- 예외의 원인이 caller에 있을 경우, callee에서 하는 것.
- try~catch
- jdk 1.7에 추가된 예외 기능
- multi catch
- catch(AException | BException e)
- 이때 AException과 BException은 상속관계가 있으면 안된다.
- try-with-resources(문법은 아니다.)
- try () { ... }
- try(FileReader in = new FileReader("a.txt"))
- finally없이 리소스를 반납해준다.
- 성능적으로 기존보다 좋아진 것은 아니다. 단지 스타일이 추가된 것이다.
- try () { ... }
- multi catch
- 종류
- Runtime Exception
- Unchecked Exception : 예외 발생 유무를 컴파일 할때가 아니라 런타임에 확인한다.
- 예외처리 하지 않아도 컴파일은 된다.
- 그 외 나머지
- Checked Exception
- 컴파일시에 예외 발생 체크
- Runtime Exception
- throw
- 예외를 발생 시킬때 사용한다.
- 정의
- Tip
- Interface는 현재 내가 가지고 있는 기능을 외부로 알려주기 위한 용도.
- Interface의 default와 static메서드에 대해서 Java SE 8에 새로 나왔기 때문에 적절한 경우에 사용하면 좋겠다.
- 익명클래스(Anonymous Class) : 클래스 구현과 객체 생성을 한번에 한다. (주로 이벤트 처리할때 사용 on Android 개발)
- 객체 생성 옆에 바로 구현하니깐 클래스 이름이 필요없다. 그래서 익명 클래스.
- 마지막 중괄호 뒤에는 세미콜론을 붙여야한다.
댓글 없음:
댓글 쓰기