💞Static 멤버💞
클래스당 하나만 생성 (= 클래스 멤버라고도 함)
동일한 클래스의 모든 객체들이 공유함
main 메소드가 실행되기 전에 먼저 생성됨
프로그램이 종료될 때 사라짐
객체를 생성하지 않고도 사용할 수 있는 멤버
💞non - Static 멤버💞
객체가 생길 때 객체마다 생김( = 인스턴스 멤버라고도 함)
다른 객체들과 공유하지 않음
객체가 사라지면 같이 소멸
💞Static 멤버의 생성💞
1. 객체 생성 후 사용
정적멤버있는클래스 인스턴스 = new 정적멤버있는클래스();
인스턴스.static멤버; //로 사용
인스턴스.static메소드; //로 사용
일반 멤버 (non static 멤버, 인스턴스 멤버) 와 동일하게 사용 가능
2. 클래스명으로 바로
클래스이름.static멤버; //로 사용
클래스이름.static메소드; //로 사용
객체 생성 전에도 가능
💞Static 멤버의 활용💞
자바에서는 어떤 변수/함수도 클래스 바깥에 존재할 수 없으므로 (캡슐화원칙)
"전역 변수/함수"의 역할을 수행
ex) java.lang.Math 클래스의 모든 멤버 static
+생성자private이므로 객체 생성 불가
💞Static 메소드의 제약조건💞
1. Static 멤버만 접근할 수 있다.
객체 없이도 존재하기 때문에 non-static 멤버들을 사용할 수 없다
(non-static 클래스는 static 멤버 사용 가능)
2. this 예약어 사용 불가
객체 없이도 존재하기 때문에 this를 사용할 수 없다.
+
실제 static 멤버의 생성 시점
= 일반적으로 "static 멤버가 포함한 클래스가 로딩될 때" 생성
메모리가 풍부한 컴퓨터에서 JVM은 처음부터 대부분의 클래스를 로딩하기 때문에
일반적으로 'JVM이 시작되는 시점' 이라고도 할 수 있음.
static 변수/ static 메소드는 한번만 생성된다.
그렇다면 어떤 객체(클래스)가 한 번만 생성되려면??
싱글톤 사용!
💞싱글톤💞
객체가 오직 1개만 생성되는 패턴
인스턴스가 필요할 때, 똑같은 인스턴스를 만들지 않고 기존의 인스턴스를 활용
- 외부에서 new 연산자로 생성자를 호출할 수 없도록 막기
=> private 생성자
- 클래스 자신의 타입으로 정적 필드 선언
=> private 접근제한자로 외부에서 접근 불가능하게 설정
- 외부 호출용 정적메소드 선언
=> 정적 필드에서 참조하고 있는 자신의 객체 리턴
public class 은채{
private static 은채 oneInstance = null; // 클래스 자신의 타입으로 정적 필드 선언
private 은채() { //외부에서 new 연산자로 생성자를 호출할 수 없도록 막기
System.out.println("세상에 유일한 은체 생성");
}
public static 은채 getInstance () { // 외부 호출용 정적메소드 선언
if(instance == null) oneInstance = new 은체 (); //처음 한번만 생성
return oneInstance;
}
}
+
💞final 클래스💞
final class 파이널클래스{}
클래스를 상속받을 수 없음을 의미!
class 자식클래스 extends 파이널클래스{} //컴파일에러
💞final 메소드💞
final 반환자료형 파이널메소드(){}
자식클래스에서 오버라이딩 불가!
💞final 변수 == 상수 💞
final double 파이널자료형 = 3.1415926535897932;
상수가 된다!
== final 필드
++
this()는 생성자에서 다른 생성자를 호출하는 문장
++
더 이상 참조되지 않는 객체를 가비지라고 함
++
클래스의 접근 지정자 : public / default
default :동일한 패키지 내에 정의된 클래스에서만 인스턴스 생성 가능
멤버의 접근 지정자 : public / default / private / protected
default : 해당 패키지 내부에서만
private : 해당 클래스 내부만
protected : 해당 패키지 내부 + 상속된 자식클래스들만
++
스택 메모리
함수의 호출과 관계되는 지역 변수와 매개변수가 저장
함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸
후입선출 : 가장 늦게 저장된 데이터가 가장 먼저 인출
힙 메모리 (new 생성자)
사용자가 직접 관리하는 메모리 영역
사용자에 의해 메모리 공간이 동적으로 할당/ 해제