ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자바의 정석] ch7-12 ~ ch7-20 객체지향 개념 정리 (패키지, import문, 제어자, abstract )
    Programming Language/Java 2021. 7. 22. 23:01

    ch7-12 패키지(package)

    - 서로 관련된 클래스의 묶음

    - 클래스는 클래스 파일(*.class), 패키지는 폴더. 하위 패키지는 하위 폴더

    - 클래스의 실제 이름(full name)은 패키지를 포함.(java.lang.String)

       rt.jar는 클래스들을 압축한 파일(JDK설치경로\jre\lib에 위치) -> Java9 부터는 없고 module 개념으로 변경

         -jar는 zip 과 같음

     

     

    ch7-13 패키지의 선언

    - 패키지는 소스파일의  첫 번째 문장으로 단 한번 선언

    - 같은 소스 파일의 클래스들은 모두 같은 패키지에 속하게 됨

    - 패키지 선언이 없으면 이름없는(unnamed) 패키지에 속하게 됨 (eclipse 에서는 default package)

     

    *bin 폴더 - 컴파일된 클래스 파일(*.class)이 있는 곳

    *src 폴더 - 소스 파일이(*.java) 있는 곳

     

     

    ch7-14 클래스 패스(classpath)

    - 클래스 파일(*.class)의 위치를 알려주는 경로(path)

    - 환경변수 classpath로 관리하며, 경로간의 구분자는 ';'를 사용. classpath(환경변수)에 패키지의 루트를 등록해줘야함.

     

     

    제어판 - 환경변수- 시스템 변수의 새로만들기를 통해 클래스 패스 등록 가능.

    새로만들기 클릭 후 변수이름과 변수값(패키지의 루트이며, workspace를 어디로 지정했는지에 따라 경로 다를 수 있음) 넣어주면 추가됨(나는 등록하지 않음! 이클립스가 해주기 때문에...)

     

    -> 등록하면 명령창에서 패키지 루트 이동 없이 클래스 실행가능(환경변수창 바뀌면 command 창 새로 열어야함!)

    정리하자면, 매번 특정 패키지가 있는 폴더로 이동 없이 classpath로 실행할 수 있게되어 간편함.

     

     

    ch7-15 import문

    - 클래스를 사용할 때 패키지 이름을 생략할 수 있음

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class ImportTest {
        
        java.util.Date Today = new java.util.Date();
     
    }
     
    //-> 아래와 같이 import문과 함께 Date 부분 앞에 패키지 이름 없이 사용 가능
     
    import java.util.Date;
     
    class ImportTest {
     
        Date today = new Date();
     
    }
     
    cs

    - java.lang 패키지의 클래스는 import 하지 않고도 사용할 수 있음(String, Object, System, Thread)

      import java.lang. *;  라고하면 모든 클래스 import 되어 편리하게 쓸 수 있음

    * import문 선언은 아래와 같이 함

         import 패키지명.클래스명;

                    또는

         import 패키지명.*;             (*는 모든 클래스 의미)

     

    - import문은 패키지문과 클래스 선언의 사이에 선언

    - import문은 컴파일 시 처리되므로 프로그램 성능에 영향없음

    1
    2
    3
    4
    5
    6
    7
    8
    9
    import java.util.Calendar;
    import java.util.Date;
    import java.util.ArrayList;
     
    //위의 세가지를 아래의 한줄로 처리 가능
     
    import java.util.*;
     
     
    cs

    - 이름이 같은 클래스가 속한 두 패키지를 import 할 때는 클래스 앞에 패키지명을 붙여야함

     

    *자동 import 이클립스 단축키: ctrl + shift + o

    (똑같은 이름의 클래스가 여러가지 있으면, 선택 할 수 있도록 옵션 주어짐)

     

     

    ch7-16 static import문

    - static멤버를 사용할 때 클래스 이름을 생략할 수 있게 해줌

    - static import문은 클래스 이름이 있으면 코드가 너무 길어져서 나중에 추가된 것이라고 함

     

     

    ch7-17 제어자(modifier)

    - 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여

    *접근제어자 public, protected, (default), private

    그 외 static, final, abstract, native, transient, synchronized, volatile, strictfp

    - 하나의 대상에 여러 제어자를 같이 사용 가능(접근 제어자는 하나만)

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class ModifierTest {
        public static final int WIDTH = 200;
     
        public static void main(String[] args) {
            System.out.println("WIDTH="+WIDTH);
        }
     
    }
     
     
     
    cs

     

     

    ch7-18 static - 클래스의, 공통적인

    제어자 대상 의미
    static 멤버변수 - 모든 인스턴스에 공통적으로 사용되는 클래스 변수가 된다.
    - 클래스 변수는 인스턴스를 생성하지 않고도 사용 가능하다.
    - 클래스가 메모리에 로드될 때 생성된다.
    메서드 - 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다.
    - static 메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없다.

     

     

    ch7-19 final - 마지막의, 변경될 수 없는

    제어자 대상 의미
    final 클래스 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. 
    그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다.
    ex) String 클래스, Math 클래스(static 메서드 집합)
    메서드 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다.
    멤버변수 변수 앞에 final 이 붙으면, 값을 변경할 수 없는 상수가 된다.
    지역변수

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    final class FinalTest { //조상이 될 수 없는 클래스
        final int MAX_SIZE = 10//값을 변경할 수 없는 멤버변수(상수)
     
        final void getMaxSize() { //오버라이딩 할 수 없는 메서드(변경불가)
            final int LV = MAXSIZE; //값을 변경할 수 없는 지역변수(상수)
            return MAX_SIZE;
        }
     
    }
     
    cs

     

     

    ch7-20 abstract - 추상의, 미완성의

    제어자 대상 의미
    abstract 클래스 클래스 내에 추상 메서드가 선언되어 있음을 의미한다.
    메서드 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다.

     

    1
    2
    3
    4
    5
    abstract class AbstractTest { //추상 클래스(추상 메서드를 포함한 클래스)
     
        abstract void move();    //추상 메서드(구현부가 없는 메서드)
     
    }
     
    cs

    -> AbstractTest a = new AbstractTest(); //에러. 추상클래스(미완성 설계도)의 인스턴스 생성불가(제품생산불가)

    *추상클래스를 상속받아서 완전한 클래스 만든 이후 객체 생성 가능

     

     

     

     

    ============================================================================

    https://youtu.be/hcHJgmX8VlA

     

    댓글

Designed by Tistory.