7일차 수업 ( 인터페이스, 추상클래스)
1. 인터페이스 ( interface )
- *.java로 저장.
- 객체생성불가 (new 불가 )
- 다른 클래스 도움을 받아서 인터페이스 구성요소 사용 가능하다. (준 상속 관계)
- 다중 구현이 가능
- 반드시 인터페이스의 추상 메소드를 구현해야 된다. {} 사용해야된다.
- 오버라이딩 메소드 문법을 따른다
- 인터페이스끼리 상속 가능하다.
public interface 인터페이스명 {} 사용하고
다른 클래스에서는 implements 인터페이스명{} 으로 사용
<인터페이스 구성요소>
가. 상수
-> 자동으로 public static final로 지정된다.
예 > int num =3; //상수, 자동으로 붙어 있는것이다.
나. 추상 메소드
-> 자동으로 public abstract 가 지정된다.
==> 자동적으로 public abstract 가 지정된다.
예 > void zzz();
* 인터페이스 용도 : 하위클래스에게 특정 메소드들을 강제적으로 사용하도록 하기 위해서.
(통일성, 일관성 )
2. final 키워드
=> '마지막'
=> '금지' 의미
=> 사용
: 클래스 --> 상속불가
: 변수 --> 값변경불가 ( 상수 )
--> 상수는 대문자로 지정한다.
--> 일반적으로 public static final 로 지정한다.
: 메소드 --> 오버라이딩 불가
3. 추상클래스 ( abstract class )
- *.java 로 저장한다.
- 추상메소드를 가지면 반드시 추상클래스로 작성해야 된다. (역은 성립 안됨)
- 객체생성불가 ( new 불가 ) 따라서 다른 클래스의 도움을 받아서 사용 가능하다.
(추상클래스와 클래스의 관계는 상속관계)
- 단일 상속만 지원, UML 표기법은 이태릭체로 표현
- 클래스 - >반드시 추상클래스의 추상메소드는 오버라이딩해야됨.
구성요소 :
- 인스턴스변수
- 메소드 ( concreate method )
- 생성자
- 추상메소드 ( abstract method )
* 용도
-> 여러 구성요소 중에서 특정 메소드만 강제할 목적으로...
(다른 변수, 메소드등은 하위 클래스에서 이전의 자식클래스처럼 부모요소를
마음대로 사용하고 특정메소드만 강제할 목적)
====수업 내용======
1. 인터페이스 ( interface )
특징 :
*.java로 저장.
객체생성불가 (new 불가 )
다른 클래스 도움을 받아서 인터페이스 구성요소 사용 가능하다.
(준 상속 관계)
<<인터페이스>> : 큰 타입 ( 삼촌)
=> implements 키워드
클래스 : 작은 타입
: 다중 구현이 가능
: 반드시 인터페이스의 추상 메소드를 구현해야 된다. {} 사용해야된다.
: 오버라이딩 메소드 문법을 따른다
: 인터페이스끼리 상속 가능하다.
<<interface>>
* 정리
클래스
extends, 단일상속
클래스
///////////////////
<<interface>>
implements, 다중 구현
클래스(인터페이스내의 모든 추상 메소드를 오버라이딩 해야 된다.)
<<interface>>
extends , 다중 상속 가능
<<interface>>
문법 :
public interface 인터페이스명 {}
<인터페이스 구성요소>
가. 상수
-> 자동으로 public static final로 지정된다.
예 > int num =3; //상수, 자동으로 붙어 있는것이다.
나. 추상 메소드
-> 자동으로 public abstract 가 지정된다.
==> 자동적으로 public abstract 가 지정된다.
예 > void zzz();
* 인터페이스 용도 : 하위클래스에게 특정 메소드들을 강제적으로 사용하도록 하기 위해서.
(통일성, 일관성 )
예 >
1) 날아다니는 것들의 기본동작인 3가지를 구현하는
메소드명을 마음대로 지정해서 사용하는 형태.
(관리가 어렵다.)
Bird Airplane SuperMan
:x() : a() : k()
:y()
:z()
2) 부모 클래스 이용
부모클래스 : takeOff(){ } //이륙
fly() { } //비행
land(){ } //착륙
Bird Airplane SuperMan
takeOff(){ } takeOff(){ } xxx(){ } //오버라이딩 하는데 하나만 다르게 하면..
3) 인터페이스 이용
<<Flayer>> takeOff(){ } //이륙
fly() { } //비행
land(){ } //착륙
Bird Airplane SuperMan
takeOff(){ } takeOff(){ } takeOff(){ }
fly() { } fly() { } fly() { }
land(){ } land(){ } land(){ }
2. final 키워드
=> '마지막'
=> '금지' 의미
=> 사용
: 클래스 --> 상속불가
: 변수 --> 값변경불가 ( 상수 )
--> 상수는 대문자로 지정한다.
--> 일반적으로 public static final 로 지정한다.
: 메소드 --> 오버라이딩 불가
3. 메소드 종류
가. worker 메소드 ( getter, setter ) , caler 메소드
나. 일반메소드 / 추상메소드
- 일반 메소드 ( concreate method )
-> 메소드가 해야할 작업이 정해짐.
예> public void aaa(){ }
- 추상 메소드 ( abstract method )
-> 메소드가 해야할 작업이 미정, 따라서 {} 이 없다.
예> public abstract void aaa();
4. 추상클래스 ( abstract class )
특징 : *.java 로 저장한다.
추상메소드를 가지면 반드시 추상클래스로 작성해야 된다.
(역은 성립 안됨)
객체생성불가 ( new 불가 )
따라서 다른 클래스의 도움을 받아서 사용 가능하다.
( 추상클래스와 클래스의 관계는 상속관계)
추상클래스
: extends, 단일 상속
클래스 - >반드시 추상클래스의 추상메소드는 오버라이딩해야됨.
문법 :
public abstract class 클래스명{}
구성요소 :
- 인스턴스변수
- 메소드 ( concreate method )
- 생성자
- 추상메소드 ( abstract method )
* 용도
-> 여러 구성요소 중에서 특정 메소드만 강제할 목적으로...
(다른 변수, 메소드등은 하위 클래스에서 이전의 자식클래스처럼 부모요소를
마음대로 사용하고 특정메소드만 강제할 목적)
5. static 키워드
* 프로그램 실행 과정
소스코드--> 컴파일--> 실행-->
필요한 객체생성(new)
method area 영역 ---------->
(class area )
- 클래스 로드
- static 키워드 지정한 요소들이 자동 로드.
- ( - static 변수
- static 메소드
- static 클래스 )
대표적인 예 : main 메소드 자동으로 로드되고, 자동으로 실행된다.
-> 프로그램 시작시 생성 ~ 프로그램 종료시 제거
-> 단 한번만 생성된다.
-> static요소 접근은
클래스명.변수
클래스명.메소드
메소드호출,
참조변수
heap 메모리 ---------->
- 인스턴스 변수,
concrete 메소드 생성
-> 객체생성시 생성 ~ 객체소멸시 제거됨.
-> new 할때 마다생성
-> 요소 접근은
참조변수.변수
참조변수.메소드
stack 메모리
- 로컬변수 생성
-> 메소드호출시 생성 ~ 메소드 종료시 제거됨
-> 메소드 호출할때 마다 생성
-> 주의할점은 반드시 사용전에 초기화 한다.
가. static 변수
=> 단 한번 생성됨.
=> 가장 오래 산다.
====> 데이터 누적용
나. static 메소드
=> 객체생성 없이 사용하기 위해서
( 자주 사용하는 메소드인 경우에 )
클래스명.메소드
==> 오버라이딩 불가
* 오버라이딩 불가
- final 메소드
- static 메소드
- private 메소드
=> static 메소드내에서 아직 생성되지 않은 인스턴스 변수 인식 불가.
예> Math.random();
Integer.parseInt()
다. static 클래스
=> 중첩 클래스 ( nested class )
class Outer { //Outer 클래스
static class Inner{
}
}
6. static 이용한 기법
가. 싱글톤 디자인 패턴
==> 인스턴스를 하나만 생성하는 방법
( 현실세계의 객체가 단하나 : 서원대학교, 지구, 대한민국... )
나. static import
==> static 변수나 메소드를 좀더 쉽게 사용하기 위한 방법.
'프로그래밍 > Java' 카테고리의 다른 글
자바 [JAVA] 9일차 수업 ( 예외처리 ) (0) | 2017.08.19 |
---|---|
자바 [JAVA] 8일차 수업 ( 문자열 , 예외처리 ) (0) | 2017.08.19 |
자바 [JAVA] 6일차 수업 (다형성) (0) | 2017.08.18 |
자바 [JAVA] 5일차 수업 ( Argument로 정수및 문자형 받아오기 ) (0) | 2017.08.18 |
자바 [JAVA] 4일차 수업 (this키워드,패키지,import 문,배열,) (0) | 2017.08.18 |