본문 바로가기
Java

자바 중급 009. 인스턴스 메서드(instance method)와 정적 메서드(static method)의 생성과 호출

by Smart Factory in 2020 2021. 8. 22.
728x90
반응형

안녕하세요. 스마트팩토리입니다.

자바 중급 009. 인스턴스 메서드(instance method)와 정적 메서드(static method)의 생성과 호출에 대해 알아보겠습니다. 

1. 인스턴스 메서드(instance method)와 정적 메서드(static method)

가.인스턴스 메서드(instance method)

- 클래스에서 기본형으로 사용하는 메서드 
- 인스턴스 변수나 인스턴스 메서드와 관련된 명령을 실행
- 다른 메서드내에서 인스턴스 변수 사용가능
- 인스턴스 생성후 (new 연산자) ' 참조변수.인스턴스메서드명( ..)'으로 호출하여 접근

나. 정적 메서드(static method)

- static 을 꼭 넣어준다.
- 인스턴스 변수나 인스턴스 메서드와 관련없는 명령을 실행
- 다른 메서드내에서 인스턴스 변수 사용 불가
- 인스턴스 생성없이 '클래스명.정적메서드명( ..)'으로 호출하여 접근

다. 인스턴스 메서드와 정적 메서드 예시

<<Com01.java 클래스 만들기>>

사칙 연산을 적용하여 인스턴스 메스드와 정적 메서드를 만들어 보았습니다 
  public int add(int x,int y ) {}
  public int min(int x,int y )  {}
  public static long mul(long x,long y )  {}
  public static double div(double x,double y )  {}

보기에는 비슷해 보이지만 인스턴스 메서드와 정적 메스드 차이는 stactic 있느냐 없느냐 차이입니다. 
이는 접근 방식에서도 차이가 있는데 인스턴스 메서드는 new 연산자를 활용하여 호출후 접근하는 반면 정적 메서드는 클래스명을 활용하여 접근합니다. 물론 new연산자로 호출한 인스턴스 변수에서 호출할수 있지만 이는 편의상 제공으로 자칫 혼란을 초래할 수 있기 때문에 가장 정석인 방법으로 클래스명을 통한 접근을 하는게 좋습니다. 

package shin0810restart;

public class Com01 {
  public int add(int x,int y ) {
  int result=x+y;
  return result;
}
  public int min(int x,int y ) {
  int result=x-y;
  return result;
}
  public static long mul(long x,long y ) {
  long result=x*y;
  return result;
}
  public static double div(double x,double y ) {
  double result=x/y;
  return result;
}
      
}

<< Com1Ex.java>> 실행클래스 작성

실행 클래스에서 add, min, mul, div 메서드를 접근해 보았습니다. 

 Com01 f1=new Com01();
 int r1=f1.add(5,2);
 System.out.println(r1);

add 메서드는 인스턴스 메서드이기 때문에 인스턴스 변수  f1을 new연산자를 이용하여 만든 다음에 add 메서드를 접근합니다. 즉 인스턴스 메서드는 해당 클래스에 객체 변수를 우선 만든 다음에 인스턴스변수명.인스턴스 메서드명으로 접근하는 것으로 이해하면 됩니다. 

메서드 결과값을 int r1 변수를 지정한 다음 그것을 출력하는 방식으로 하였습니다. 

 
 Com01 f2=new Com01() ;
 System.out.println(f2.min(10, 5));
 

같은 방식으로 f2 변수도 만들어서 메서드 접근은 f2.min() 으로 접근합니다. 즉 인스턴스변수명.인스턴스 메서드명으로 접근합니다. 

결과값을 출력하는 방식은 다른 변수로 저장하고 다시 그것을 출력하는 방법과 직접 출력문에 인스턴스변수명. 인스턴스메서드명으로 해도 됩니다. 
 
 long r2=Com01.mul(300, 200);
 System.out.println(r2);

정적 메서드의 경우는 인스턴스 변수 즉 객체 생성없이 바로 클래스명(Com01).메서드명 으로 접근하면 됩니다.인스턴스 메서드와 정적 메서드의 결정적인 차이라고 할 수 있습니다. 

자료형은 숫자의 크기에 따라서 int, long, float, double 을 선택하면 됩니다. 
 
 double r3=Com01.div(5.2,0.4);
 System.out.println(r3);

div 메서드도 역시 정적 메서드이기에 클래스명. 메서드명으로 접근하여 실행하면 됩니다. 

package shin0810restart;

public class Com1Ex {

public static void main(String[] args) {
 Com01 f1=new Com01();
 int r1=f1.add(5,2);
 System.out.println(r1);
 
 Com01 f2=new Com01() ;
 System.out.println(f2.min(10, 5));
 
 
 long r2=Com01.mul(300, 200);
 System.out.println(r2);
 
 double r3=Com01.div(5.2,0.4);
 System.out.println(r3);
 
}

}

<< 실행값 보기>>

메서드의 실행값을 보면 위와 같습니다. 

자료형에 따라서 정수형인지 실수형인지 알 수 있습니다. 

 

라. 인스턴스 메서드에서는 정적메서드 접근은 가능

  (정적메서드에서 인스턴스 메서드 접근은 불가)

클래스에서 메서드를 작성할때 위 처럼 인스턴스 메서드 영역에서는 정적 메스드를 접근하여 값을 넣어줄 수 있습니다. 

인스턴스 메서드 영역내에 정적 메서드를 작성할 수 있지만 정적메서드에서는 인스턴스 메서드를 작성할 수 없습니다. 이는 인스턴스 메서드의 경우 객체를 생성해야 비로소 명령을 실행할 수 있기 때문입니다. 즉 인스턴스 메서드가 작성된 클래스라고 해도 이를 활용하기 위해서는 객체 생성이 필수가 됩니다. 하지만 정적 메서드는 객체 생성이 없이도 활용할 수 있기 때문에 클래스명.정적메서드명으로 접근하면 호출하여 사용할 수 있습니다. 

 

728x90
반응형

댓글