Java 레퍼런스와 Static

이은엽·2023년 5월 7일
0

레퍼런스

- 객체를 가리키는 변수
- 객체가 메모리 상에 생성되면, 그 객체의 주소값을 가지고 있는 변수
- 레퍼런스는 객체의 복사본이 아니라 객체의 주소값을 가지고 있기 때문에, 같은 객체를 가리키는 레퍼런스끼리는 같은 주소값을 가지고 있다.

예제코드

MyObject obj1 = new MyObject();
MyObject obj2 = obj1;
- obj1과 obj2는 모두 MyObject 클래스의 객체를 가리키는 레퍼런스이다.
- obj2에 obj1을 대입함으로써, obj2도 obj1이 가리키는 같은 객체를 가리키게 된다.
- 레퍼런스는 null 값을 가질 수도 있습니다. null은 객체가 아니라, 아무것도 가리키지 않는 상태이다.

Static

- 클래스 레벨의 키워드로, 클래스에 속한 필드나 메서드에 적용된다.
- static으로 선언된 필드나 메서드는 클래스에 종속된다.
- 인스턴스와는 별개로 존재한다.
- 객체를 생성하지 않아도 클래스에서 직접 접근할 수 있다.

예제코드

public class MyClass {
private static int count = 0;
public MyClass() {
    count++;
}
public static int getCount() {
    return count;
}
}
MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
System.out.println(MyClass.getCount());

- MyClass 클래스에는 count라는 static 필드와 getCount()라는 static 메서드가 선언한다.
- static 필드와 메서드는 객체 생성 없이도 MyClass.getCount()와 같이 클래스에서 직접 접근할 수 있다.
- MyClass 객체를 2개 생성하고, getCount()를 호출하여 생성된 객체의 개수를 출력하는 코드이다.
-  count 필드는 static으로 선언되어 있으므로, 객체를 생성할 때마다 count 값을 증가시키고, getCount()를 호출하면 현재까지 생성된 객체의 수를 반환한다.

클래스 변수와 인스턴스 변수

클래스 변수

- 해당 클래스의 모든 인스턴스가 공유하는 변수
- static 키워드를 사용하여 선언
- 클래스 이름으로 직접 접근할 수 있다.
- 객체를 생성하지 않아도 사용할 수 있으며, 해당 클래스의 모든 객체가 값을 공유하므로, 하나의 클래스 변수 값 변경은 모든 객체에 영향을 미친다.

public class MyClass {
static int classVariable = 10;
}

인스턴스 변수

- 객체가 가지는 변수로, 객체의 속성을 나타낸다.
- 인스턴스 변수는 객체를 생성할 때마다 새로 생성되며, 객체마다 값이 달라진다.
- 인스턴스 변수는 클래스 내부에 선언되며, 객체 생성 후 접근할 수 있다.

public class MyClass {
int instanceVariable = 5;
}

클래스 메소드와 인스턴스 메소드

클래스 메소드

- 해당 클래스와 관련된 작업을 수행하는 메소드
- static 키워드를 사용하여 선언
- 클래스 메소드는 객체를 생성하지 않고도 클래스 이름으로 직접 호출할 수 있다.
- 클래스 메소드는 클래스 변수와 마찬가지로, 클래스의 모든 객체가 공유하는 메소드

public class MyClass {
static void classMethod() {
// 클래스 메소드 구현
}
}

인스턴스 메소드

- 해당 객체와 관련된 작업을 수행하는 메소드
- 인스턴스 메소드는 객체를 생성한 후, 생성된 객체를 통해 접근
- 인스턴스 메소드는 인스턴스 변수와 함께 사용되는 경우가 많다.

public class MyClass {
	void instanceMethod() {
    	// 인스턴스 메소드 구현
	}
}

요약

- 클래스 변수와 클래스 메소드는 클래스에 고정된 속성과 동작을 정의
- 인스턴스 변수와 인스턴스 메소드는 객체에 대한 속성과 동작을 정의
- 클래스 변수와 메소드는 객체를 생성하지 않고도 호출 가능
- 인스턴스 변수와 메소드는 객체 생성 후에만 호출 가능

0개의 댓글