Java 인스턴스 멤버와 정적 멤버 #1

jjinny_0609·2023년 2월 13일
0

Java

목록 보기
16/31

인스턴스 멤버와 정적 멤버

멤버

- 인스턴스 멤버 : 객체마다 가지고 있는 멤버를 말함

class A{
//인스턴스 필드
String color;
//인스턴스 메소드
void run(){
}

}

- 정적(클래스) 멤버 : 클래스에 위치시키고 객체들이 공유하는 멤버

class A{
	//정적 필드
	static String color;
	//정적 메소드
	static void run(){
		
	}
}

인스턴스 멤버와 this

인스턴스(Instance) 멤버란 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드를 말하는데,
이들을 각각 인스턴스 필드, 인스턴스 메소드라고 부른다.

인스턴스 멤버 선언

public class Car{
	// 필드
	int gas;

	// 메소드
	void setSpeed(int speed) { ... }
}

예제]

정적멤버와 static

정적(Static)은 '고정된' 이란 의미로 정적멤버는 클래스에 고정된 멤버로서
객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말합니다.
호출할때 인스턴스 멤버는 객체를 생성해서(인스턴스화) 호출하지만
정적 멤버는 new라는걸 사용하지 않고 객체를 클래스 이름만으로도 호출이 가능함.

정적 멤버 선언

  • 정적 필드와 메소드를 선언하려면 필드와 메소드 선언 시 static 키워드를 추가적으로 붙이면 된다.
    정적 필드와 정적 메소드는 클래스에 고정된 멤버이므로 클래스 로더가 클래스(바이트 코드)를 로딩해서
    메소드 메모리 영역에 적재할 때 클래스별로 관리됩니다.
public class 클래스{
	//정적 필드
	static 타입 필드[= 초기값];

	//정적 메소드
	static 리턴 타입 메소드( 매개변수선언, ... ) { ... }
}

정적 멤버 사용

클래스가 메모리로 로딩되면 정적 멤버를 바로 사용할 수 있음, 클래스 이름과 함께 도트(.) 연산자로 접근한다.

ex)
클래스.필드;
클래스.메소드(매개값, ...);

정적 메소드 선언시 주의할 점

  • 객체가 없어도 실행된다는 특징 때문에 정적 메소드를 선언할 때는 이들 내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수 없습니다.
    정적 메소드에서 인스턴스 멤버를 사용하고 싶다면 객체를 먼저 생성하고 참조 변수로 접근해야 사용 가능하다.
    또한 객체 자신의 참조인 this 키워드도 사용이 불가능하다.
    인스턴스멤버는 new를 사용해야 메모리에 올라가는점을 알아두자.


싱글톤(Singleton) 패턴

간단하게 설명하면 new 키워드를 못쓰게 만드는 패턴
전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우에 사용, 단 하나만 생성된다고 해서 싱글톤이라고 한다.


final 필드와 상수

  • 변수 : 변수(變數, variable)는 수학에서 쓰이는 수식에 따라서 변하는 값
    int a = 10;
    a = 20;

  • 상수 : 상수(常數, constant)란 수식에서 변하지 않는 값
    -> 상수는 반드시 초기화를 해주어야한다. 초기화되지 않은 필드를 그대로 남겨두면 컴파일 에러가 발생한다.
    // 상수이름은 모두 대문자로 작성하는 것이 관례이다.
    // 만약 서로 다른 단어가 혼합된 이름이라면 언더바( _ )로 단어를 연결해주자.
    int a = 20;
    a = 30; ( 안됨 )

  • final : '최종적' 이란는 뜻으로 final필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없다는 뜻이다.
    final 필드 선언방법
    final 타입 필드 [= 초기값];

예제]


예제2]
선언부에 static을 적지않아 발생하는 오류

// Cannot make a static reference to the non-static field Earth.EARTH_RADIUS
// 비정적 필드 Earth.EARTH_RADIUS에 대한 정적 참조를 만들 수 없음
// 선언부에 static을 주면 해결됨


static을 작성하고 정상적으로 출력되는 모습

profile
뉴비 개발자 입니다. velog 주소 : https://velog.io/@jjinny_0609 Github 주소 :

0개의 댓글