클래스 메서드 & 인스턴스 메서드

2022. 5. 22. 14:54Java

◎ 클래스 메서드

-> 메서드 앞에 static이 붙은 메서드

-> 클래스 변수처럼 객체를 생성하지 않고도 "클래스 이름. 메서드이름(매개변수)"의 형식으로 호출이 가능

-> 인스턴스와 관련이 없는 메서드를 클래스 메서드로 생성한다.

 

◎ 인스턴스 메서드

-> 반드시 객체를 생성해야 호출이 가능

-> 메서드 작업을 하는데 있어서 인스턴스 변수를 필요로 하는 메서드

-> 인스턴스 변수는 인스턴스를 생성해야만 만들어지기 때문에 인스턴스 메서드도 인스턴스를 생성해야 호출이 가능한 것이다.

 

◎ 정리

-> 클래스 설계 시, 멤버변수 중 모든 인스턴스에 공통적으로 사용되는 것에 static을 붙인다.

-> static이 붙은 클래스 변수는 클래스가 메모리에 올라갈 때 이미 자동으로 생성되기 때문에 클래스 변수는 인스턴스를 생성하지 않아도 된다.

-> 인스턴스 변수는 인스턴스가 반드시 존재해야 사용 가능하기 때문에 클래스 메서드는 인스턴스 변수를 사용할 수 없다.

-> 메서드 내 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.

 

-> 사용 예

class Math{
	long x, y;
	
	// 인스턴스 메서드
	long add() {return x + y;}		// 덧셈
	long sub() {return x - y;}		// 뺄셈
	long mul() {return x * y;}		// 곱셈
	double div() {return x / y;}	// 나눗셈
	
	// 클래스 메서드
	static long add(long x, long y) {return x + y;}
	static long sub(long x, long y) {return x - y;}
	static long mul(long x, long y) {return x * y;}
	static double div(double x, double y) {return x / y;}
}

public class MathTest {

	public static void main(String[] args) {
		
		
		// 클래스 메서드 호출 -> 인스턴스 생성 없이 호출 
		System.out.println("======= 클래스 메서드 호출 =======");
		System.out.println(Math.add(250L, 180L));
		System.out.println(Math.sub(250L, 180L));
		System.out.println(Math.mul(250L, 180L));
		System.out.println(Math.div(250.0, 180.0));
		System.out.println();
		
		// 인스턴스 메서드 호출 -> 인스턴스 생성 후 호출
		Math m = new Math();
		m.x = 250L;
		m.y = 180L;
		
		System.out.println("======= 클래스 메서드 호출 =======");
		System.out.println(m.add());
		System.out.println(m.sub());
		System.out.println(m.mul());
		System.out.println(m.div());

	}

}

-> 결과

◎ 클래스 멤버와 인스턴스 멤버간 참조와 호출

-> 같은 클래스에 속한 멤버들 간에는 인스턴스 생성 없이 서로 참조와 호출이 가능하다. 

-> 클래스 멤버가 인스턴스 멤버를 참조, 호출하려는 경우에는 인스턴스 멤버가 존재하는 시점에는 클래스 멤버는 항상 존재하지만 클래스 멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 않을 수 있기 때문에 인스턴스를 생성해야 한다.

 

public class MemberEx {

	int iv = 1;
	static int cv = 7;
	
	int iv2 = iv;
//	static int cv2 = iv; -> 클래스변수는 인스턴스 변수를 사용할 수 없다.
	static int cv2 = new MemberEx().iv; // 클래스 변수가 인스턴스 변수를 사용하려면 인스턴스를 생성해야 한다.
	
	static void staticMethod() {
		System.out.println(cv);
//		System.out.println(iv); 인스턴스 생성 후 참조 가능
		MemberEx m = new MemberEx();
		System.out.println(m.iv);
	}
	
	// 인스턴스 메서드는 클래스 메서드와 인스턴스 메서드 모두 사용 가능
	void instanceMethod() {
		System.out.println(cv);
		System.out.println(iv);
	}
	
	static void staticMethod2() {
		staticMethod();
//		instanceMethod(); 클래스 메서드가 인스턴스 메서드를 호출 하려면 인스턴스를 생성하고 호출해야 한다.
		MemberEx m = new MemberEx();
		m.instanceMethod();
	}
	
	// 인스턴스 메서드는 인스턴스 생성 없이 클래스 메서드와 인스턴스 메서드 모두 호출 가능
	void instanceMethod2() {
		staticMethod();
		instanceMethod();
	}

}

 

 

★ 참고 및 출처

자바의 정석

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=76083001&partner=googlek&BSCPN=ORM&BSPRG=ADWORDS&BSCCN1=89221&utm_source=ADWORDS&utm_medium=cpc&utm_term=JAVA%C0%C7%C1%A4%BC%AE&gclid=Cj0KCQjwm6KUBhC3ARIsACIwxBh0GfDwaYEn-OxcsMebsH6l7xUyjucQnjB91bKGtzZvvFY8dkB1ULQaAnlhEALw_wcB

 

'Java' 카테고리의 다른 글

초기화 블럭  (0) 2022.05.23
생성자  (0) 2022.05.23
변수  (0) 2022.05.22
클래스 & 객체  (0) 2022.05.22
스레드(1)  (0) 2022.03.14