- 클래스로 객체를 생성하는 작업을 인스턴스화라고 부른다.
- 인스턴스화된 객체(인스턴스)는 생성할 때마다 새로운 heap 메모리 공간을 차지.
- 인슽넌스화하기 위해서는 생성자 함수르 사용한다.
- 생성자 함수는 클래스를 객체로 만들어주는(인스턴스화 해주는)역할.
(객체안의 속성들을 초기화해주는 역할) - 기본 생성자, 단일 속성 생성자, 모든 속성 생성자 등 다양한 생성자를 사용할 수 있다.
- 기본 생성자는 클래스내에 따로 정의를 하지 않아도 사용가능. 다른 생성자들은 클래스내에 정의가 되어있어야 사용가능.
- 기본 생성자를 제외한 다른 생성자를 정의할 때는 기본 생성자도 함께 정의해야 된다.
- 기본 생성자는 클래스를 생성하면 자동으로 만들어지는 생성자
- 형태 : public 클래스명()
{
//속성값의 초기화
}
//생성자의 사용
클래스명 변수명 = new 클래스명(); - 생성자를 사용할 때는 항상 new 키워드를 함께 사용한다.
- 매개변수를 한 개부터 여러개 가질 수 있고 매개변수의 역할을 속성 값을 초기화해주는 역할이다.
- 매개변수가 있는 생성자를 정의할 때 매개변수 명은 멤버변수의 이름과 비슷하거나 동일하게 만든다.
- 형태
public 클래스명(자료형 변수명....)
{
//속성값 초기화
} - 대부분 매개변수의 최대개수는 속성(멤버변수)의 개수와 일치시킨다.
- static 으로 선언된 변수, 메소드와 전역변수는 static 메모리 영역에 저장됨
- static 메모리에 저장된 변수나 메소드는 GC의 영향을 받지않고 프로그램 시작부터 종료까지 계속 남아있음.
- static 키워드로 생성되는 변수나 메서드는 jre의 클래스 로더가 클래스를 읽어들일 때 바로 메모리에 저장. 그래서 객체를 만들지 않고도 변수나 메서드를 바로 사용할 수 있다.
- static은 꼭 사용해야 하는 경우에만 사용해야 된다.
클래스 간의 같은 값을 갖는 변수를 공유해야 할 때 static 멤버변수나 메서드를 이용해서 공유
- 변수는 유효범위에 따라 지역변수, 전역변수, static멤버변수로 나눌 수 있다.
- 지역변수는 {} 블록 안에서 선언된 변수. 제어문의 블록이나 메서드의 블록안에서 선언되기 때문에 소속되어 있는 블록 밖에서는 사용할 수 없는 변수. 지역변수는 stack 메모리 영역에 저장되고 호출되는 블록이 종료될 시 GC에 의해 메모리에서 삭제된다.
- 지역변수로 선언된 변수가 속해있는 블록보다 레벨이 낮은 블록에서는 사용할 수 있다.
ex) public int add(int a, int b) {
//for문은 add보다 레벨낮은 블록
for(int i = 0; i < 10; i++)
{
//add보다 레벨이 낮으므로 add의 지역변수인 a, b를 사용할 수 있다.
}
} - 멤버변수는 클래스내에서 사용가능한 변수. 멤버변수는 객체가 생성될 때(인스턴스화 될 때) 객체와 함께 heap 메모리에 저장. 객체가 삭제될때까지 객체내에서 자유롭게 사용할 수 있다. 맴버변수의 유효범위는 선언된 클래스 내부.
- 전역변수(static)는 클래스안의 모든 메서드에서 사용 가능. 멤버변수는 전역변수라고 볼 수 있다. 클래스 내부에서 자유롭게 사용할 수 있기 때문이다.
- static변수는 프로그램이 구동될 때 어디서든지 사용할 수 있는 변수. 너무 많은 static변수를 생성하면 메모리 누수가 발생할 수 있다.
- 두개 이상 객체(인스턴스) 생성 시에 각각의 메모리 공간에 각각의 객체(인스턴스)가 저장되던 기존 방식과는 다르게 하나의 객체(인스턴스)만을 생성해서 사용하는 방식 ex) Student s1 = new Student(); Student s2 = new Student(); s1, s2 모두 동일한 객체(인스턴스)를 사용하도록 만드는 방식
- 싱글톤 방식의 장점은 대규모의 프로젝트에서는 매우 많은 클래스가 존재하는데 이 클래스들을 모두 인스턴스화 하여 사용할 시 많은 메모리가 소비되는데 싱글톤 방식으로 사용하게 되면 메모리 절약 및 메모리 효율을 늘릴 수 있다.