'final 키워드'에 해당되는 글 1건

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 변수나 메소드를 좀더 쉽게 사용하기 위한 방법.

 

블로그 이미지

itworldkorea

IT korea가 세상(world)을 변화시킨다.

,