1. static 키워드
1) 개념
- 프로그램 실행과 관련된 키워드임
- 객체 생성 전에 결정되고 객체 생성인 new와 무관
- static으로 지정된 변수 및 메서드, 클래스는 프로그램 실행시 생성이 된다 ★
2) 로컬 변수 vs 인스턴스 변수 vs static 변수
(1) 로컬 변수
- 메서드 안에서 선언. 메서드 호출 ~ 메서드 종료. stack 메모리
(2) 인스턴스 변수
- 메서드 밖에서 선언. 객체 생성(new) ~ 객체 소멸(heap에 생성된 인스턴스를 참조 못 할 때). heap 메모리
: Cat c = new Cat();
c.변수명();
- new 할 때마다 매번 생성
- 용도 : 객체의 속성 저장 (고양이 이름, 나이)
(3) static 변수
- 메서드 밖에서 선언하고 static 지정. 프로그램 실행(main 시작) ~ 프로그램 종료(main 종료). method area 메모리 (객체 생성과 무관하다)
: 클래스명.static변수();
- 한 번만 생성되고 life cycle이 길다
- 용도 : 데이터를 공유
3) 메서드 vs static 메서드
(1) 메서드
- 객체 생성(new) ~ 객체 소멸
: Cat c = new Cat();
c.method();
- new할 때마다 매번 생성된다 (실제로는 공유한다)
(2) static 메서드
- 프로그램 실행시 ~ 프로그램 종료시 (객체 생성과 무관하다 ★)
: 클래스명.static메서드();
- 한 번만 생성된다
- 용도 : new 없이 사용하기 위해
예> Integer.parseInt("10");
- 주의할 점 : 인스턴스 변수 및 this 사용 불가능 (static 메서드가 먼저 만들어지기 때문)
상속 관련에서는 오버라이딩 (overriding) 불가능
4) 일반 클래스 vs static 클래스
: 반드시 중첩 클래스에서 사용 가능
public class A {
static class B {
}
}
5) static 블럭 ★
- static {
실행문;
}
- 프로그램 시작할 때 자동으로 실행된다 (초기화 작업 - DB 및 파일 연동)
2. package 및 import
1) package
(1) 용도
: 클래스 파일들 관리 (윈도우의 폴더 역할)
(2) 특징
- 같은 패키지 안에는 동일 이름의 클래스 지정 불가.
- 패키지가 다르면 접근이 불가 (접근 하려면 import 이용)
- Java API는 패키지로 제공된다.
예> java.lang, java.util
2) import 문
(1) 문법
: import 패키지명.클래스명;
(2) 특징
- import문은 여러번 지정 가능
- java.lang은 자동으로 import가 된다 (String, System 클래스들을 import 없이 사용할 수 있음)
3. UML (Unified Modeling Language)
- 설계 단계에서 추출된 다양한 산출물들을 도식화하는 도구
- 클래스 다이어그램 (class diagram)

- private은 - public은 + protected는 # 으로 표기