-
[자바의 정석] 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문
- 클래스를 사용할 때 패키지 이름을 생략할 수 있음
123456789101112131415class 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문은 컴파일 시 처리되므로 프로그램 성능에 영향없음
123456789import 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
- 하나의 대상에 여러 제어자를 같이 사용 가능(접근 제어자는 하나만)
12345678910public 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 이 붙으면, 값을 변경할 수 없는 상수가 된다. 지역변수 123456789final class FinalTest { //조상이 될 수 없는 클래스final int MAX_SIZE = 10; //값을 변경할 수 없는 멤버변수(상수)final void getMaxSize() { //오버라이딩 할 수 없는 메서드(변경불가)final int LV = MAXSIZE; //값을 변경할 수 없는 지역변수(상수)return MAX_SIZE;}}cs ch7-20 abstract - 추상의, 미완성의
제어자 대상 의미 abstract 클래스 클래스 내에 추상 메서드가 선언되어 있음을 의미한다. 메서드 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알린다. 12345abstract class AbstractTest { //추상 클래스(추상 메서드를 포함한 클래스)abstract void move(); //추상 메서드(구현부가 없는 메서드)}cs -> AbstractTest a = new AbstractTest(); //에러. 추상클래스(미완성 설계도)의 인스턴스 생성불가(제품생산불가)
*추상클래스를 상속받아서 완전한 클래스 만든 이후 객체 생성 가능
============================================================================
'Programming Language > Java' 카테고리의 다른 글