ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 6. 접근제한자와 this , Interface
    program_language 및 궁금한것/Java 2019. 4. 15. 19:46

    패키지명: ex) kr.co.encore <-- 동일한 파일의 이름을 구분짓기 위해서

    ** 자바에서는 최소 2개 이상의 패키지 명을 쓰는 것을 권장

     

    저장이력을 볼 수 있다.

    클래스 - 마우스 오른쪽- Relpays with - Local History

     

    { 중괄호 }<-- scope, Body

     

    접근지정(제한)자 :AccessControl

    public : 같은패키지는 물론 서로 다른 패키지에서도 접근 가능

    protected : 서로 같은 패키지에서 접근가능, 만약 상속관계를 갖는다면 다른 패키지라도 자식이 부모를 참조가능

    default(생략) : 서로 같은 패키지에서 접근가능

    private : 같은 클래스 내에서만 (맴버끼리만) 접근가능

    * 상속은 굳이 같은 패키지가 아니여도 된다. 단, 접근 제한자만 private, default가 아니라면

     

    접근지정자 위치

    1. 필드

       [접근지정자 4개] 자료형 변수명;

    2. 메소드

       [접근지정자 4개] 리턴자료형 메소드명(   )

      {

     

      }

    -----------------필드와 메소드는 클래스 안에 존재해야 한다.

    3. 클래스 

      [접근지정자 2개- public / default] class 클래스명{

     

      }

    4. 생성자


    <this> 자기참조연산자

           --> 현재 클래스를 가르키는 레퍼런스 변수(참조변수)!

           --> 보통은 생략한다.

     

    1. 메소드 내에서 사용한다.

    2. 객체 생성자내에서 다른 생성자를 호출시 사용한다.

    3. 매개변수(지역변수)와 맴버변수(필드)를 구분하기 위해 맴버변수 앞에 this.을 붙여 사용한다.

    * 메소드 안에 쓰는 변수와 클래스에 쓰이는 변수

    * 배개변수와 맴버변수명이 같은 경우가 많다.

    ** 즉, this가 붙으면 클래스의 변수이다.

    ** println <-- PrintStream 

    ** 메소드 호출싱에는 항상 누구 호출인지 명시해야 한다. 같은 클래스라면 생략을 많이 한다.

     

    형식)

        this.필드명

        this.메소드명();

        this(); <-- 생성자 호출

     

    참고)

        super.필드명

        super.메소드명();

        super( ); <-- 부모클래스 생성자 호출

     

    Abc a= new Abc(500)

    sysout(a.su) <--값은 0

     

    public class Abc{

       int su;

     

       public Abc(){

     

    }

    public Abc(int su){

    su =su;

    }

    }

     

    * 클래스 앞에는 public과 생략 둘 중 하나만 쓸 수 있다. 저장파일명.class만 public을 붙일 수 있다.


    <Interface> 인터페이스 - 객체를 연결해 주는 객체

      쉽게 메뉴판을 생각하면 된다.

    즉, 주방과 나를 연결시켜주는 메뉴판(인터페이스)라고 한다.

    짬뽕을 만들 수 있어요. 볶음밥을 만들 수 있어요. --> 주문 --> 조리 --> 식사

    주문하는것은 주방은 다 만들어야 한다. 즉, 메뉴판에 있는것은 주방에도 있어야 한다.

    추가로 만드는 것은 상관 없다.

     

    형식)

        interface 인터페이스명{

         // 필드  <-- int su

            [고정 public static final ] int su;

         // 선언된 메소드 <-- class와 다르다. 

            [ 고정 public, abstract ] void print(); 

        }

    --> 저장: 인터페이스명.java -컴파일-> 인터페이스명.class 

     

    - interface의 구성맴버는 필드, 선언된 메소드로만 구성

        void print(){

        

        } <-- 정의된 메소드, 구현된 메소드!

        void print(); <-- 선언된 메소드 (바디없는, 영역괄호 없는 메소드)

     

    <손님의 입장> 

    - 서로 다른 제품에 연결할 수 있는 공통 연결 모듈을 의미.

    file System, DatabaseSystem 

    공통된 CRUD를 정의한 것이 Interface이다.

     

    <주방의 입장> - 객체를 생성하는 곳

    - 클래스에 다중 상속을 구현할 수 있다. // 내가 주방장이다.

     난 주방장이야. 메뉴판을 여러개 받을 수 있지. 

    - ★ 인터페이스는 어떻게 사용하나요? 클래스에 구현해서 사용합니다.

    키워드: implements (구현의 의미를 갖는다.)

     

    주방 implements 메뉴 <- 주방은 메뉴를 참고한다. 메뉴가 사라져도 주방에 영향을 주지 않는다.

     

    잘 모르겠다면 손님의 입장에서 주문 할때를 생각하자.

    손님이 메뉴판에서 음식을 주문하면 음식이 만들어지는 과정은 생각하지 않는다. 주문한 음식만 나오면 된다. 

    (= 단, 메뉴판에 있는 음식들은 주방에도 꼭 있어야 한다. )

     

    class 클래스명 implements 인터페이스명 {

       // 클래스- 주방, implements- 구현의 약속, 인터페이스- 메뉴판

    }

     

    new를 대체할 수 있는 것을 static이라고 한다.

    new - 동적 메모리 할당 static - 정적 메모리 할당


    <final>

    1. final 자료형 변수명;

        ----> 마지막 변수 : 상수 ( 더이상 변하지 않는다.) constatnt

        ----> 상수의 식별을 위해 전체 대문자로 표기.

     

    예) final int MAX=100; // <--final은 전체 대문자로 표기한다.

       max++; --> 101: 에러발생 - 상수는 값의 변경을 할 수 없다.

     

    2. final 리턴형 메소드명( ){ }

        ----> 마지막 메소드: 오버라이딩(메소드 재정의) 할 수 없는 메소드

     

    3. final class 클래스명 {  }

        ----> 마지막 클래스 : extands를 할 수 없다. 자식클래스를 갖지 않는 클래스 이다.

        ----> 완벽한 클래스( 자식을 통한 기능확장을 원치 않는다.)

        ----> 보안

     

    <클래스와 인터페이스 간의 상속 문법>

    1.

    class A{}

     

    class B extends A{ // extens뒤에선 상속 받고자 하는 한개의 클래스만 정의!

     // 확장(자식클래스를 확장 클래스!)

    }

     

    ------------------------------------------------------------------------------------

    interface A{ }

    interface B{ }

     

    class C implements a,b( // a,b인터페이스내의 선언된 메소드를 c클라스에서 전부 구현

     // 구현의 약속

    }

    ------------------------------------------------------------------------------------

    interface A{}

    class B{}

    class C implements A extens B{

          // 에러발생: 클래스와 인터페이스를 동시에 상속할때는 클래스먼저, 인터페이스 나중에 

         // implrmrnyd가 먼저 나오면 컴파일러가 extens Object 를 implemens키워드 앞에 추가 한것

    }====>(x)

     

    class C extend B implement A{

    }====>(o)

    interface A{ void hello(); }

    interface B{ void hi(); }

     

    interface C extands A,B{ // implements(x) 

       void good();

    }

    ------------------------------------------------------------------------------------

    class A { void hello(){}}

    interface B A{

    } <-- 말이 안됨!

    반응형

    'program_language 및 궁금한것 > Java' 카테고리의 다른 글

    if문과 case문의 성능비교  (0) 2019.04.18
    7. Array , JavaBeans, 추상클래스  (0) 2019.04.16
    이클립스 사용 단축키  (0) 2019.04.15
    5. 자바의 객체 지향이란? (OOP)  (0) 2019.04.12
    4. 자바의 입력  (0) 2019.04.11

    댓글

Designed by Tistory.