티스토리 뷰

두 점 거리계산하기를 예로 들어 인스턴스 메서드와 static 메서드 비교하기

 

*staic 메서드

1
2
3
4
5
6
7
8
9
10
public class Main {
// (x,y) (x1,y1) . 두 점 와 간의 거리를 구한다
    static double getDistance(int x, int y, int x1, int y1) {
        return Math.sqrt((x-x1)*(x-x1) + (y-y1)*(y-y1)); // x, y는 지역변수
    }
    public static void main(String args[]) {
        System.out.println(getDistance(1,1,2,2));
    }
}
 
cs

 

- static 메서드는 메서드 내에서 인스턴트 변수를 사용하지 않는다.

- 인스턴스와 관계가 없으므로 static으로 선언 가능하다.

- 객체를 생성하지 않고 호출이 가능하다.

- 메서드 내에서 인스턴트 변수를 사용하지 않는다면 static을 붙이는게 좋다.

- 모든 인스턴스에서 공통적인 값을 가져야하는 경우, static 변수를 선언하는 것이 좋다.

ex) 마린의 hp와 위치(x,y)는 인스턴스마다 다르므로 인스턴스 변수로, 공격력(weapon)과 방어력(amor)는 인스턴스마다 동일해야하므로 static으로 선언.

ex)

class marine{

int x = 0; int y =0;

int hp = 50;

static int weapon = 6;

static int armor = 0;

}

 

*인스턴트 메서드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyPoint{
    int x;
    int y;
 
    MyPoint(int x, int y){
        this.x=x;
        this.y=y;
    }
    double getDistance(int xl, int yl){ //인스턴스 메서드
        /*인스턴스 변수 x,y를 사용하기 때문에 xl,yl만 받으면 된다.*/
        return Math.sqrt((x-xl)*(x-xl) + (y-yl)*(y-yl));
    }
}
public class Prac {
    public static void main(String[] args) {
        MyPoint p = new MyPoint(1,1)
        System.out.println(p.getDistance(2,2));
    }
}
cs

 

- 위 getDistance는 인스턴트 메서드로, 인스턴스 변수를 사용해서 xl과 yl만 받아오면 된다.

- 인스턴스 메서드는 객체를 생성한 뒤 사용 할 수 있다. (사용법 : 참조.메서드(매개변수))

- 인스턴스와 관련이 있으면 static을 사용 할 수 없다.

 

static메서드의 사용

System.out.println(Exercise6_6.getDistance(1,1,2,2));

 

인스턴스 메서드의 사용

MyPoint p = new MyPoint(1,1);

System.out.println(p.getDistance(2,2));

 

변수 구분하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class PlayingCard {
    int kind;
    int num;
    static int width;
    static int height;
    PlayingCard(int k, int n) {
        kind = k;
        num = n;
    }
    public static void main(String args[]) {
        PlayingCard card = new PlayingCard(1,1);
    }
}
 
cs

 

클래스 변수(static 변수) : width, height

인스턴스 변수 : kind, num

지역 변수 : k, n, card, args

 

변수가 선언된 위치를 보면 변수의 종류를 알 수 있다. 클래스 블럭{ } 내에 선언된 변수는 인스턴스 변수이고, static이 붙은 것은 staic 변수(클래스 변수)이다 그리고 나머지는 모두 지역변수이다.

 

참고 url : http://codechobo.tistory.com/1

 


본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.

댓글