🔷 Java 언어는 메모리 관리를 개발자가 하지 않는다.
GC(Garbage Collection)
가 메모리 관리
Class Loader
: *.class 파일을 메모리로 읽어온다.
클래스 영역(메소드 영역)
: 클래스의 정보(설계도)를 저장하는 영역
힙
: 인스턴스가 생성되는 공간
스택
: 메서드 수행시 프레임이 할당되며 필요한 변수나 중간 결과 값을 임시 기억하는 곳
(메서드 종료 시 할당 메모리 자동제거)
클래스 영역
에 저장되어있다.로딩 시점
메모리 상의 차이
문법적 특징
❗ 인스턴스명을 통한 접근이 아닌 클래스 이름을 통한 접근을 권장한다.
- 클래스에서 static으로 선언한 변수는 다른 인스턴스에서 값을 변환 시 클래스 및 해당 클래스로 생성한 모든 인스턴스에서 동시다발적인 변환이 이루어진다.
🔷 클래스와 관련 있는 인터페이스들을 모아두기 위한 이름 공간
❗ * 의 하위 패키지는 다른 공간의 것들이라 가져올 수 없음
pkg1.Person p1 = new pkg.Person();
pkg1.pkg2.pkg3.Person p3 = new pkg1.pkg2.pkg3.Person();
🔷 객체의 속성(data field)과 행위(메서드)를 하나로 묶고 실제 구현 내용 일부를 외부에 감추어 은닉한다.
🔷 클래스
, 멤버 변수
, 멤버 메서드
등의 선언부에서 접근 허용 범위를 지정하는 역할의 키워드이다.
public
: 모든 위치에서 접근이 가능protected
: 같은 패키지에서 접근이 가능, 다른 패키지 접근 불가능default
: 같은 패키지에서만 접근이 허용, 접근제한자가 선언이 안 되었을 경우 기본 적용private
: 자신 클래스에서만 접근이 허용public
, default
🌟
protected
와default
의 차이
protected
는default
와 다르게 다른 패키지에서 기존 클래스를 상속한 경우에 한하여 접근할 수 있다.
default
로 생성된 클래스는 다른 패키지에서 절대 접근이 불가.
static
: 클래스 레벨의 요소 설정final
: 요소를 더 이상 수정할 수 없게 함abstract
등public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
❗ boolean 타입의 접근자는 'is멤버변수명', 나머진 'get멤버변수명'이 국룰!
public class Manager {
private static Manager manager;
private Manager() {}
public static Manager getManager() {
if(manager = null)
manager = new Manager();
return manager;
}
}
너무 좋은 글이네요. 공유해주셔서 감사합니다.