본문 바로가기

백엔드 공부/Java

[Java] static?

메소드 오버로드에 관하여 문제를 풀던 중 궁금증이 발생했다.

원인

package sec04.Q4;

public class PrinterEx {

	public static void main(String[] args) {
		Printer printer = new Printer();
		printer.println(10);
		printer.println(true);
		printer.println(5.7);
		printer.println("홍길동");
	}

}

위의 코드를 실행하기 위한 Printer.java 코드를 작성해야한다.

내가 썼던 코드

package sec04.Q4;

public class Printer {
	
	void println(int print) {
		System.out.println(print);
	}
	
	void println(boolean print) {
		System.out.println(print);
	}
	
	void println(double print) {
		System.out.println(print);
	}
	
	void println(String print) {
		System.out.println(print);
	}
}

답지에 써있던 정답

package sec04.Q4;

public class Printer {
	
	static void println(int print) {
		System.out.println(print);
	}
	
	static void println(boolean print) {
		System.out.println(print);
	}
	
	static void println(double print) {
		System.out.println(print);
	}
	
	static void println(String print) {
		System.out.println(print);
	}
}

 

답지에 써있던 정답과 다른 점은 void 앞에 static이 붙었나 붙지 않았었나의 차이였다.

그럼 왜 static을 써야하는지 궁금했다.

 

Static을 쓰는 이유

1. 메모리에 고정 할당된다.
2. 객체 생성 없이 사용할 수 있다.
3. 프로그램이 시작되면 메모리의 static 영역에 적재되고, 프로그램이 종료될 때 해제된다.
4. s
tatic 메서드 내에서는 인스턴스 변수를 사용할 수 없다.

이 네가지 이유 중에서 주목해야 할 점은 두번째 이유였다.

답지와 코드가 달라서 답지대로 적어서 작성해본 결과 나온 메시지는 아래와 같았다.

"The static method println(int) from the type Printer should be accessed in a static way."

문제에서는 이미 Printer printer = new Printer();로 Printer 객체를 생성했다.
메시지 내용은 말 그대로 println이 객체를 선언하여 사용하지 말고 Printer 그대로 불러와 static 방식으로 사용되어야 한다는 것이었다.

 

결론

그냥 답지가 잘못 적은 것이라 판결내리고 넘어가기로 했다.

만약 답지에서 적어놓은 대로 코드를 적어 사용하려면 PrinterEx의 코드를 아래와 같이 바꿔야 했다.

package sec04.Q4;

public class PrinterEx {

	public static void main(String[] args) {
		// Printer printer = new Printer();
		Printer.println(10);
		Printer.println(true);
		Printer.println(5.7);
		Printer.println("홍길동");
	}

}

객체를 생성하지 않고 바로 불러오는 방식으로 코드를 바꾸면 정답지의 코드로 사용할 수 있었다.

'백엔드 공부 > Java' 카테고리의 다른 글

[Java] ArrayList와 LinkedList  (2) 2023.12.27
[Java] 자동 타입 변환  (4) 2023.12.05
[Java] 열거 타입  (0) 2023.11.24
[Java] 향상된 for문  (2) 2023.11.24
[Java] 문자열 비교  (2) 2023.11.24