2020. 4. 20. 11:50ㆍJAVA
Package
- 관련있는 클래스와 인터페이스의 집합
- 자바에서 배포의 최소 단위
- 독립적으로 실행되는 단위는 메소드인데, 자바는 메소드만 단독으로 생성할 수 없어서
클래스 안에 메소드를 만들고 클래스들을 하나의 파일(패키지)에 저장할 수 있다.
- 일반적으로 자바에서는 파일 단위로 배포하지 않고 패키지 단위로 배포.
- 디렉토리와 유사하지만 디렉토리는 아님.
package 이름 규칙
- 처음 2개,3개는 회사 도메인이나 이메일 주소를 이용
- 마지막은 기술 이름이나 프로젝트 이름
- 모두 소문자로 기술하는것을 권장함
- 자바 패키지는 jar 파일로 압축해서 배포
- jar파일은 자바에서는 압축을 해제하지 않고 바로 사용 가능
- tar는 linux나 unix(apple)에서 압축 표준
1) 자바 프로그램이 클래스를 찾는 순서
- 현재 작접 중인 클래스의 패키지에서 찾는다.
- 없으면 현재 프로젝트에 속해있는 패키지에서 찾는다.
- 자바가 기본적으로 제공하는 패키지에서 찾는다
- 외부에서 추가한 패키지에서 찾는다
import
- 패키지 이름을 생략하고 클래스 이름만으로 클래스를 사용하기 위한 명령어
- 패키니지 전체 import 가능
ex)
import 패키지이름.*; ==> 패키지이름에 속한 모든 클래스를 패키지 이름을 생략하고 사용하는 것이 가능
- 특정 클래스나 상수만 import ==> static import
import 패키지이름.클래스이름
import 패키지이름.클래스이름.final상수
*서로 아른 패키지에 동일한 클래스가 존재하는 겅우
- java.util.Data, java.sql.Date 두개가 있는데 2개의 클래스를 모두 사용하기 위해서는
하나만 import하고 다른 하나는 패키지 이름을 적어서 사용해야 한다.
ex)
import java.util.*;
Date d1 = new Date(); // java.util.Date
java.sql.Date d2 = new java.sql,Date(); // java.sql.Date
* java.awt 패키지가 있고 java.awt.event 패키지가 있는 경우에 2개의 패키지는 전혀 다른 패키지
import java.awt.*; //이렇게 해도 java.awt.event 패키지에 있는 클래스는 전체 이름을 전부 입력해야 함.
tip!) import구문은 자동 완성 IDE에서 자동완성 해줌
Library & Framework
Library: 프로그램을 쉽게 개발할 수 있도록 도와주는 파일이나 파일의 집합(보통 패키지단위)
Framework: Library의 집합이나 프로그램을 쉽게 개발할 수 있도록 도와주는 프로그램(라이브러리보다 조금 더 큰 개념)
Solution: 특정 목적의 프로그램을 개발하기 쉽도록 해주는 프로그램 또는 framework
상속(Inheritance)
- 상위 클래스의 모든 것을 하위 클래스가 전부 물려받는 것
상속의 장점
- 재사용을 하기 때문에 코드가 간결해짐
상속의 단점
- 유지보수가 좋아질수도 있지만 어려워질수도 있음
상속의 목적
- 여러 클래스를 만들어서 사용하는 경우에 공통된 내용이 있어서 그 내용을 상속을 받을수 있도록 하기 위해서.
==> 코드를 간결하게 하기 위해
- 프레임워크에서 제공하는 클래스의 기능이 부족해서 기능을 추가하기 위해 ==> SubClassing
- 템플릿 메소드 패턴을 구현하기 위해서 ==> 특정 메소드가 존재한다는 것을 보장하기 위해서
상속의 종류
1) 단일 상속: 하나의 클래스로부터 상속
2) 다중 상속: 2개 이상의 클래스로부터 상속
-> java는 단일 상속만 지원
-> java는 명시적으로 상속받는 문장을 표현하지 않으면 java.lang.Object 클래스로부터 상속받는것으로 간주
- 모든 멤버가 상속되지만 private멤버는 하위 클래스에서 접근할 수 없다
- 초기화 블럭과 생성자는 상속되지 않음
- 동일한 이름의 뱐수가 상위,하위 클래스에 존재하면 public이라도 인스턴스를 이용해서 상위의 변수에는 접근 안됨.
- static property는 상속됨
- 그 동안 상위 클래스의 내용을 가지고 인스턴스를 만들고 하위 클래스의 내용을 추가하는 형태로 인스턴스가 만들어짐.
자바에서 패키지 기재
- 특정 패키지의 클래스를 만든 경우 파일의 최상단에 package 소속을 입력해야 함.
Gabarge Collection
- java는 가비지 컬렉션이 메모리를 정리
- 호출 시점은 우리가 알 수 없음.
- 강제 호출메소드인 System.gc()가 있지만 바로 호출되지 않을 수 있음
- 우선순위가 낮아서 다른 작ㅇ덥이 수행중이면 바로 호출되지 않음
- java에서 메모리 정리를 하고 싶은 객체가 있으면 Null을 대입해서 참조를 제거하면
- 참조가 없는 heap의 공간을 정리
- null을 대입하면 객체의 finalize()가 호출되고 차후에 가비지컬렉션에 의해 heap에서 제거