국비지원학원/Java

32일차

초코맛 2018. 12. 6. 21:43
반응형
*Class
-class
-abstant class
-interface
-innerclass-innerclass
-innerclass-nested class
-innerclass-local class
-innerclass-anonymous class

  • Class : 설계도, 사용자정의 자료형이며 참조형 데이터형(객체생성[ :클래스를 사용하기위해서 heap메모리에 올리는 과정]해 사용)이다.
    • 문법: 클래스명 객체명 = new 생성자();
    •                          =>객체명으로 여러기능(method) 사용.
    •           new 생성자();  <객체화를 한후에 작업이 종료되는 경우 method를 부를필요가 없는 경우
    •                                  =>객체화로 사용이 끝나는 경우, method호출할 필요 X
    •           new 생성자().method명(); =>객체화 후에 method를 하나만 호출하면 종료하는 경우.
  • 상속 : 부모클래스의 기능을 자식 클래스에서 확장하여 사용하는 것.
    • 장점 : 코드의 재사용성 증가.
    • <사람세계에서는 부모가 자식을 낳지만 상속은 자식이 부모의 기능을 사용하다보니 자식이 선택하여 자식->부모가 된다.
    • <extends 부모 : 로 부모의 정보가 남지만..  부모에게는 아무 흔적이 남지 않아 부모는 자식을 모른다.
    • 자식->부모 (:부모는 자식을 모른다.)          <보통 부모는 남이 만들고 자식은 내가 만들게 된다...남이 만든거 내가건들이기 힘드니까..
    • <자식은 부모를 안다~!
    • <부모에는 변수와method 자식에게도 변수와 method가 있는데,
    • 부모의 자원을 쓸때 super, 자식이 자기꺼 쓸때 this() (:생성자 호출) , this.변수 (:method형식();)
    • this는 내클래스의 자원과 부모클래스의 자원을 다 쓸수 있다.
    • super : 부모의 자원과 자식의 자원이 같은 이름을 가질때, 부모의 자원을 식별하기 위해 사용
    • Override: 부모자식관계에서 부모의 메소드 재정의(모두 같고 수행되는 코드만 달라야한다.) 최우선~!~!
    • Overload: method 재정의(parameter만 다르다.)
    • Override,Overload => 다형성
    • 캡슐화 : 접근지정자로 접근을 제어

*객체화(5가지중 4번째)
  •  ex)
class Super{
    int i;
    public Super(){
    }   
    public void printI(){
        system.out.println(i);
    }
}

class Sub extends Super{
    int j;
    @Override //(anotation: JDK 1.5부터 추가)
    public void printI(){
        system.out.println("자식 i"+i);
    }
    public void printJ(){
        system.out.println("자식"+j);
    }
}

  • <객체화를 하게 되면 보통 자식클래스로 객체화를 하는데
  • Sub s = new Sub();        <이때의 s 라는 변수명으로 부모의 자원 (변수, method) 사용가능하게 된다.. 패키지가 보통 달라 default쓸수 없다고 많이 본다. 
  • Super s = new Sub();   <가능, 자식은 부모이다. 라는 말이 있다... 자식클래스를 갔더니 부모가 누군지 알아서 가능하게 된다. 
  • => is a 관계의 객체화.~!~!~!!
  • <원래는 같아야 하는데, 관계가 들어 있어 되는것. 
  • <has a? 관계 도...나중에..
  • is a 관계의 객체화 : 부모 클래스명 객체명 = new 자식클래스의 생성자();   : 자식의 부모를 알고있기 때문에 가능.
  • Super s = new Sub();   <객체화를 자식으로 해도 설계도가 Super이므로 부모의 변수와 method만 사용가능하게 된다.
  • => 부모의 자원(변수, mehtod)
  • s.i=100;  <가능. 변수는 부모의것 사용하는데,
  • s.printI()  <오버라이드 되어 자식의 것이 최우선적이므로 x
  •               :Override된 method인 경우 자식의 method 가 최우선적으로 호출된다.
  • Sub s = new Super(); X:어디에도 자식의 정보가 없기때문에 할당이되지 않는다.
  •                                 :부모클래스에는 자식클래스의 정보가 들어있지 않기 떄문에
  •                                 : is a 관계의 객체화 =>객체다형성(Super s = new Sub(); / Sub s = new Super(); (X) )같은 객체의 이름을 다르게 사용?
*추상클래스
class 클래스명
    변수//명사적특징

   method//동사적 특징 : 일-부모구현O  ,  부모구현X->자식에서 하게끔 하는게 추상클래스.

  • ex)
  • <person에서 인자있는 eat을 볼때 아무도 안쓰고 다 재정의 해서 쓸때 부모에 정의할 필요가 없음, 부모가 일안하고 자식이 하게 끔

     

 

 

 

  • 객체화가 되지 않는다. (단, 자식 클래스가 생성되면서 부모가 만들어지는 경우에는 객체화 가능.)
  • 상속을 목적으로 만들어지는 클래스
  • 추상 method
    • method의 body가 없는 method, 일을 정의할 수 없다.(일의 목록(:자식에서 반드시 구현=>구현의 강제성)만 정의)
    • 작성법)         <PL/SQL의 패키지 헤더와 비슷<너는 내자식이고 이거이거 해야해,,하는것. 
      • 접근지정자 abstract 반환형 method명(매개변수,,,);
      • 접근지정자 : public 이거나 protected, default(같은 패키지내에),static,synchronized    <final은 오버로딩을 해야해서 X 상속ㄴㄴ니까 안됨.
        •            public : 클래스 외부에서 접근 가능
        • protected : 같은 패키지 안의 다른 클래스에서 접근 가능, 패키지가 다르면 상속관계의 자식클래스에서만 접근 가능하다.
        • default : 접근지정자를 기술하지 않은 상태, 같은 패키지 안의 다른클래스에서 접근가능    <기본 접근지정자..안쓰면 default 
        •               다른 패키지의 클래스에서는 접근 불가하다.
        • private : 클래스 안에서만 접근가능   <(밖에서는 무조건 자식도 안됨, 나만쓸꺼야)★
        • (폴더directory 개념)
        • static : 공용메모리에 생성
        • final : 값변경 불가      <메모리에 올라간 변수로의 차단
        • transient : 직렬화 방지 키워드    <정보누수 방지 /토막내는게 직렬화=>막는다.
        • (memory 개념)
  • ex)
  • <person에서 인자있는 eat을 볼때 아무도 안쓰고 다 재정의 해서 쓸때 부모에 정의할 필요가 없음.
  • =>abstractor Person/ abstractor eat=>추상메소드
    • =>굳이 부모에서 만들필요가 없지만 사람이라면 뭐든 먹어야...
    • =>자식클래스가 반드시 자신에 맞게 구현해야할 일의 목록 : 추상 method.
    • =>+언어 : 사람은 언어를 반드시 가진다.

*Interface
  • 다중상속의 장점을 사용하기 위해 사용.
  • 기능추가를 손쉽게 할수 있다.
  • 약결합의 구현으로 객체간의 유연성을 향상시킬수 있다.
  • <결합도는 낮고 응집도는 높은게 좋은 프로그램<약결합이 빠름.<얘 때문에 자바의 꽃
  • <생성자를 못가진다. 객체화 ㄴㄴ
  • 객체화가 되지 않는다.(is a 관계의 객체는 저장할 수 있다.)
  • 구현클래스(나의 자식) 가 생성되면 그 주소는 저장가능하다. ->is a 관계의 객체화는 가능. (생성자가 없어 스스로는 안됨)
  • 문법) 접근지정자 interface 인터페이스명 extends 부모인터페이스,,,{
    •           public  : 패키지 외부에서 접근 가능,
    •           default(패키지 접근지정자) : 패키지 내에서만 접근 가능해요.
    •           부모인터페이스가 여러개 가능.
    •           추상메소드는 body가 없어 일을 할수 있는애가 아니었는데,... 얘는 일의 목록...
  • JDK1.8 에서부터는 Default method가 추가 됨.(Default method: 추상메소드만 가졌는데, 일을 할수 있는 body({ })를 가진 method
  • <변수는 가질수없고 가지면 Error
  • <상수는 프로그램에서 필요한 기준값을 담는데, 값변경이 되지 않는다. public static final 상수명= 값; 의형테를 띔
  • abstract method를 가진다.
    • 접근지정자 abstract 반환형 method명 (매개변수,,,);   <내자식은 이걸 꼭 해야해 할때..!
    • 접근지정자 반환형 method명(매개변수,,,);
    • 이떄의 접근지정자 : public , protected , default
  • ex) 걸어다니는것-표유류-개,소,사람-시츄,치와와,진돗개,   황소,젖소,누렁이,점박이,    홍,이-길동,재찬,     클락
    • <공통특징을 위로올리게된다.
    • <이때의 걸어다니는것은 클래스가 될수도 인터페이스가 될수도 있다.
  • ex) 날라다니는것-조류-닭, 비둘기, 독수리---  이때 클락은 날기도 하는데 부모가 둘이라 부모가 모호하다는 단점.
    • <다른부모가 제공하는 자원도 쓰고 싶을때 inter face로 만들고 정의하게 된다.

+인터페이스명
+Constant
+abstract method
                      ↑
                      |
                      | (구현은 점선) 
                      |
+자식클래스

추상method Override
  • 작성법)
    • class 클래스명 [implement 구현인터페이스명,,,];
  • <추상클래스가 되면 구현안해도 되는데,,,
  • <인터페이스는 내줄에있는 모든 추상메소드가 있는 모든거 구현해야한다./일반은 다 override해야한다.
  • <내 위에 있는 모든 상속줄의 부모의 추상 method를 모두 override해야 한다.
  • <interface내에서는 override해도 body가 없어 아무소용이 없기 때문에 추상메소드를 구현하지 않는다.
  • //자식 클래스로 객체화 : 모든 mehtod를 호출할 수 있다.(//자식클래스명 객체명 = new 자식의생성자(); 가 일반적)
  • //is a 관계의 객체화(부모를 앞에두고 객체화) : 내 상속 줄에 있는건 모두 다 올수 있다.
  • //<is a 관계의 객체화는 생성자가 중요한게 아니라 담아내는 데이터형에따라 호출이 달라지므로 데이터형이 중요
  • //부모와 같은 이름의 변수는 자식의 변수를 사용하고, method의 이름이 다르면 각각 다 사용할수 있다. 만약 override한 method라면 override한 method 가 출력된다.
  • //객체다형성이라고도 한다. 
  • //is a 관계의 객체화 : 부모의 자원과, 자식이 Overrride한 method 사용.
  • //부모클래스명 객체명 = new 자식클래스생성자();

  • //<interface는 자식을 통해서만 객체가 만들어진다.
부모는 모든(사람)클래스의 공통특징vs 자식은 나만의 특징.

  • <interface의 default method로 일반업무를 볼수있게 되는데, 츄상클래스와 큰차이가 없게된다.
  •  * default method: 인터페이스에서 업무(자바코드)를 기술 할 수 있는 method <br>
  •  * default method를 호출하려면 구현 클래스로 is a 관계의 객체화를 해야만 한다.<br>

 
반응형

'국비지원학원 > Java' 카테고리의 다른 글

34일차  (0) 2018.12.06
33일차  (0) 2018.12.06
31일차  (0) 2018.12.03
30일차  (0) 2018.12.03
29일차  (0) 2018.11.30