큐범
Just do debug
큐범
전체 방문자
오늘
어제
  • 전체보기 (128)
    • 회고 (4)
    • JAVA (16)
      • JAVA 기초 (18)
      • JAVA Algorithm, Datastruct (13)
    • Spring (11)
    • Micro Service Architecture (3)
    • JPA (6)
    • gRPC (4)
    • Network (8)
    • Process (7)
    • Cloud (4)
    • Python (10)
    • Web(vue) (2)
    • UMC (1)
    • DB (9)
    • CS (1)
    • Clean Code (1)
    • TDD (9)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
큐범

Just do debug

JAVA

[JAVA] 클래스 메서드(static메서드)와 인스턴스 메서드

2021. 8. 10. 13:11

인스턴스 메서드는 인스턴스 변수와 관련된 작업을 한다. 즉, 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드이다.

인스턴스와 관계없는(인스턴스 변수나 인스턴스 메서드를 사용하지 않는)메서드를 클래스 메서드를 클래스 메서드(static메서드)로 정의한다.

  1. 클래스를 설계할 때, 멤버변수 중 모든 인스턴스에 공통으로 사용하는 것에 static을 붙인다.
  1. 클래스 변수(static변수)는 인스턴스를 생성하지 않아도 사용할 수 있다.
  1. 클래스 메서드(static메서드)는 인스턴스 변수를 사용할 수 없다.
  1. 메서드 내에서 인스턴스 변수를 사용하지 않는다면, static을 붙이는 것을 고려한다.
package object_oriented_programming;

class MyMath2{
	long a, b;
	
	long add() {return a+b;}
	long subtract() {return a-b;}
	long multiply() {return a*b;}
	double divide() {return a/b;}
	
	static long add(long a, long b) {return a+b;}
	static long subtract(long a, long b) {return a-b;}
	static long multiply(long a, long b) {return a*b;}
	static double divide(double a, double b) {return a/b;}
	
}


public class MyMathTest2 {

	public static void main(String[] args) {
		System.out.println(MyMath2.add(200L, 100L));
		System.out.println(MyMath2.subtract(200L, 100L));
		System.out.println(MyMath2.multiply(200L, 100L));
		System.out.println(MyMath2.divide(200.0, 100.0));
		
		MyMath2 mm = new MyMath2();
		mm.a = 200L;
		mm.b = 100L;
		
		System.out.println(mm.add());
		System.out.println(mm.subtract());
		System.out.println(mm.multiply());
		System.out.println(mm.divide());		
			
	}

}
//결과
300
100
20000
2.0
300
100
20000
2.0

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

인스턴스 멤버가 존재하는 시점에 클래스 멤버는 항상 존재하지만, 클래스 멤버가 존재하는 시점에 인스턴스 멤버가 존재하지 않을 수도 있기 때문이다.

package object_oriented_programming;

public class MemberCall {

		int iv = 10;
		static int cv = 20;
		
		int iv2 = cv;
//		static int cv2 = iv; //에러. 클래스 변수는 인스턴스변수를 사용할 수 없음.
		static int cv2 = new MemberCall().iv;
		
		static void staticMethod1() {
			System.out.println(cv);
//			System.out.println(iv); //에러. 클래스 메서드엔서 인스턴스 변수를 사용불가
			MemberCall c = new MemberCall();
			System.out.println(c.iv);
		}
		
		void instanceMethod1() {
			System.out.println(cv);
			System.out.println(iv); //인스턴브메서드 에서는 인스턴스 변수를 바로 사용가능
		}
		
		static void staticMethod2() {
			staticMethod1();
//			instanceMethod1(); //에러. 클래스메서드에서는 인스턴스메서드를 호출할 수 없음.
			MemberCall c = new MemberCall();
			c.instanceMethod1();
		}
		
		void instatnceMethod2() {
			staticMethod1();
			instanceMethod1();
		}
}
 

출처 : JAVA의 정석 - (남궁성지음)

    'JAVA' 카테고리의 다른 글
    • [JAVA] 생성자(Constructor)
    • [JAVA] 오버로딩(overloading)
    • [JAVA] 재귀호출(recursive call)
    • [JAVA]변수와 메서드
    큐범
    큐범

    티스토리툴바