정적 메소드 (static )

흔히 java 프로그래밍을 시작하면, 메인을 불러와서 뭔갈 할거다.

이거처럼

package sec06;

public class Hello {
    public static void main(String[] args) {
        System.out.println("hello");
    }
}

이렇게 해서 실행하면 hello가 출력되는 것을 볼 수 있다.

그런데 여기서 static 이 뭐지?라고 한다면

쉽게 말하면 여기에 포함된 애들은 어디서든 참조할 수 있고, 어디서든 쓸 수 있단 말.

그리고 얘네는 클래스가 메모리에 올라가면서 정적 메소드가 바로 생성되면서 따로 인스턴스를 만들 필요가 없음

뭔말이냐면

Triangle t1 = new Triangle

을 안해도 된다는 말

call by reference, call by value?

일단 자바에서는 class 객체를 인수로 전달하면 call by reference 방식으로 처리한다.

call by value : 함수에 변수를 주면, 변수를 담는 새로운 상자를 만들어서 거기서 계산을 한다.

call by reference : 함수에 '변수의 주소'를 주는 방식. 그럼 뭐가 달라지나요? 라고 물으신다면 알려드리죠

package src08;

class Dog {
    String name;
    String breeds;
    int age;

    void wag() {
        System.out.println(name + "가 살랑살랑~");
    }

    void bark() {
        System.out.println(name + "가 멍멍!");
    }

}

public class ExeDog2 {
    static void dog_prn(Dog d) {
        System.out.println("이름 : " + d.name);
        System.out.println("품종 : " + d.breeds);
        System.out.println("나이 : " + d.age);
        d.wag();
        d.bark();

    }

    public static void main(String[] args) {
        Dog d1 = new Dog();
        d1.name = "망고";
        d1.breeds = "골든리트리버";
        d1.age = 2;
        dog_prn(d1);

        Dog d2 = new Dog();
        d2.name = "망고";
        d2.breeds = "믹스";
        d2.age = 3;
        dog_prn(d2);
    }
}

일단 dog_prn 이라는 정적 메소드를 불러와서 d1이라는 클래스 객체가 인수로 전달되었고, call by reference 로 처리가 되는데,

dog_prn 이란 메소드를 실행하면 print를 여러번 해주는 함수다.

정적 메소드를 이용하면 좀 더 코드에 간결성을 부여할 수 있다. (메모리상으로는 비효율적일 수 있음)

call by reference 에서 많이들 쓰는 예시를 보자.

package src08;

class Number {
    int x;
    int y;
}

public class Java_reference {
    static void swap(Number z) {
        int tmp = z.x;
        z.x = z.y;
        z.y = tmp;
    }

    public static void main(String[] args) {
        Number n = new Number();
        n.x = 10;
        n.y = 20;
        System.out.println("swap()메소드 호출 전 " + n.x + "," + n.y);
        swap(n);
        System.out.println("swap()메소드 호출 후 " + n.x + "," + n.y);
    }
}

실행 결과

call by reference는 c++에서도 나온다. 포인터와 주소, 역참조를 사용한다.

'TIL > [객체지향 프로그래밍] TIL' 카테고리의 다른 글

TIL (22.04.16) 시험 범위 정리 1장  (0) 2022.04.16
TIL (22.04.13)  (0) 2022.04.13
TIL (22.04.06)  (0) 2022.04.06
TIL (22.04.01)  (0) 2022.04.01
TIL (22.03.23)  (0) 2022.03.23