-
221214 자바 7. 인터페이스, 내부클래스, 익명클래스,스타터스 백엔드 3기 2022. 12. 14. 18:31
하루입니다.
InterfaceTest, Worker, Student, VolTest, InnerClassTest(내부외부), AnonymousTest(무명익명)
- 객체 형변환은 여러가지 객체를 공통 타입에 저장하고자 할 때, 배열이나 매개변수를 정의할 때 사용한다.
- static final 타입 이름 = 값; 은 자주 사용된다. 수정불가한 값을 공유한다는 뜻이다.
인터페이스
- 아래 것들은 여러개오니까 바로 힙에 저장 못 하고 스택에 저장하고 참조하는 것.
- 배열 : 동일 타입의 여러개 데이터를 모은다.
- 클래스 : 데이터와 메소드를 여러개 모은다. 객체를 표현하기 위한 것이기 때문이다.
- 인터페이스 ! static final 데이터와 abstract 메소드 여러개를 모은 것이다.
interface 직원 {
[abstract public] 일하다(){}
점심먹다(){}
}interface 학생 {
공부하다(){}
점심먹다(){}
}class 조교 implements 직원, 학생 {
일하다(){ 오버라이딩 }
점심먹다(){ 오버라이딩 }
공부하다(){ 오버라이딩 }
}직원s = new 직원(); 불가
직1원s = new 조교(); 자동형변환
학생 s = new 조교(); 자동형변환
1. 자바는 클래스간 다중상속이 불가하다.
2. 인터페이스의 메소드는 앞에 [abstract public] 이 자동으로 붙는다. 인터페이스는 추상 메소드만 포함한다.
3. 클래스는 인터페이스를 다중상속 받을 수 있다.
4. 자식클래스는 인터페이스의 메소드를 반드시 오버라이드 해야 한다.
5. 인터페이스는 객체 생성이 불가능하다.
6. 그래서 생성자가 필요 없다.
7. 객체 생성 안 하고 변수 사용하기 위해 static final public 변수를 사용한다.abstract 클래스와 인터페이스 비교
abstract 인터페이스
1. 서로 다른 클래스에 공통으로 사용될 메소드를 선언한다 (공통)
2. 서로 다른 클래스 중 일부 클래스의 부모클래스가 정해진 상태라면 interface를 사용해야 한다.abstract class A[
abstract void m1();
void m2();
}Interface I {
void m1();
void m2();
}- 추상 메소드와 구체적으로 정의된 메소드가 혼합되어 있다.
- 부분적으로 추상적이다.
- 단일상속만 가능하다.
- 모든 메소드가 추상메소드이다.
- 완벽하게 추상적이다.
- 다중상속이 가능하다.
- 서로 관계 없는 클래스들에게 관계를 맺어 줄 수 있다.
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다.
- 독립적인 프로그래밍이 가능하다. 간접적 관계를 가지게 되기에, 한 클래스의 변경이 다른 클래스에 영향을 미치지 않기 때문이다.
I i1 = new B();
I i2 = new C();
array[0] = i1;
array[1] = i2;
- 이런 식으로 관계 맺고 큰 타입에 넣을 수 있다.
- 인터페이스는 객체생성 불가하니까 자식 클래스 객체를 넣어야 한다.class B implements I
class C extends D implements Ijdk 1.8부터 추가된 특징 : static 메소드, default 메소드 1.8 전 1.8 후 abstract public 메소드
static final public 변수abstract public 메소드 : 필수 오버라이딩
static final public 변수
public static 메소드 : 오버라이딩 불가능
public default 메소드 : 선택적 오버라이딩
- 인터페이스에 메소드 추가하는 건 잘 생각해야 한다. 이미 상속받은 a b c 클래스는 다 고쳐야 한다. 그래서 static 클래스나 default 메소드를 사용해야 한다.
- 기본 정의하는 건데 그대로 사용해야하면 static, 오버라이딩 혹은 그대로 사용해야 하는 거면 default이다.
- static은 클래스영역이니까 인터페이스클래스명.메소드명() 으로 쓰고, default는 static 아니니까 인터페이스로생성한객체.메소드명() 으로 쓴다.
- 디폴트 메소드와 조상 메소드가 충돌한다면, 조상 클래스의 메소드가 상속된다.
내부클래스(inner class) = 중첩클래스
- 어디서 어떻게 사용되는지를 모르니까 이해가 잘 되지 않는다. 익명클래스가 많이 사용된다고 하셨는데, 주로 익명클래스의 용도로 사용되는 걸까?
- 용도
- 1. 중요한 정보를 다룰 때(?). 내부클래스를 사용하기 위해서는 반드시 외부클래스를 사용해야 한다. 이 방법을 통해 타 클래스의 내부 클래스 접근 방법을 제한할 수 있다.
- 2. 이건 한 번 쓰고 말 거다 (???)
- 3. 클래스를 변수처럼 쓰기 위해서 (???)
- 4. 익명클래스로 쓰려고 (???)
class A { } class B { outer class
class A { } A는 제 겁니다. inner class
A a1 = new A( );
}class B {
A a1 = new A( ); 오류. B 허락 받아야 한다.
}소속을 확실히 한다는 장점이 있다. 사용방법을 제한시킨다. 포함관계를 확실히 한다.
A클래스는 B클래스의 멤버변수처럼 취급이 된다.멤버변수 - 객체변수 멤버변수 - static 변수 지역변수 멤버inner 클래스 멤버 static inner 클래스 지역 inner 클래스
익명클래스 (무명클래스)
8장. 예외처리
- 오류란 프로그램을 작성하고 실행하는 과정에서 생기는 오동작이다.
- 견고한 프로그램은 항상 일정한 동작을 보장해야 한다.
컴파일오류
- 문법 / 구문 / systax 오류
- 빨간 줄 뜬다.
- 자바 소스를 수정할 때까지 계속 발생한다.
실행오류
- 실행 조건에 따라 발생한다. ==> 프로그래밍적 해결 없다.
- 컴퓨터 전원이 나간다, 메모리가 부족하다 ==> 프로그래밍적 해결 없다.
프로그래머가 해결할 수 있는 실행오류 : 예외 = execption
- int i = 100/0; 이라거나
- String arr[] = new String[i] i = -1; 전달되는 경우
자바의 모든 예외는 execption의 자식이다.
try catch의 수행과정

try catch finally의 수행과정

나중에 파일, 디렉토리, db, 네트워클르 사용해 개발할 것이다. .
이를 컴퓨터 자원이라고 한다.
만약 윈도우에서 자원 사용하는 프로그램이 하나도 없는 상태에서, 자바프로그램 파일 오픈을 허락하는데, 자바프로그램의 읽기/쓰기를 수행한 후, 윈도우 파일을 close(); 해야 한다.
FileReader fr= bnew FileReader("a.txt");
fr.read(); => 만약 여기서 에러가 발생할 경우, 실행이 중단되어 close();가 되지 않는다.
다른 파일들이 이 기능을 사용하지 못한다. 메모리 누수가 발생한다.
...
fr.close(); => 이 기능은 반드시 실행되어야 하고, 그래서 finally 블록 안에 들어가야 한다.
Multiple markers at this line
- Resource leak: 'fr' is never closed
- Unhandled exception type FileNotFoundException
내부클래스 ...
'스타터스 백엔드 3기' 카테고리의 다른 글
221215 자바8. 예외처리 (0) 2022.12.15 자바의 내부클래스와 익명클래스의 이해 (0) 2022.12.14 221210. 자바5 (클래스 형변환) (0) 2022.12.13 221212. 자바 4 {생성자 (접근제한자, this, super, 상속) } (0) 2022.12.12 유데미 스타터스 취업 부트캠프 3기 - 백엔드 3주차 (0) 2022.12.09