정적 메소드 (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 |