생성되는대로 사용하고 있던 public static void
같이 일하던 동료가 면접에서 저거 하나 하나 설명하라는 질문을 받았다는 걸 듣고,
'아 뭐 저렇게 쉬운거.. 아쒸.. 나.. 좀 설명을 못할것 같은데?' 라는 생각이 들었다.
그러므로 이참에 정리
이건 자바의 '특성'과도 관련이 있다.
OOP의 장점인 캡슐화를 위해서!!!!
public class test {
private String id;
private Integer sum;
//getter
public String getId() {
return id;
}
public String getSum() {
return sum;
}
//setter
public void set(String id) {
this.id = id;
}
public void setSum(Integer a, Integer b) {
this.sum = a + b;
}
}
이런 코드를 많이 보셨을거다.
id와 pw의 변수는 private으로 선언하여 '직접' 접근할 수 없게 해 두었고, 그 값을 가져오기 위해서는 getter를 사용해야 한다. 이렇게 구현하는 걸 '캡슐화' 라고 한다.
이렇게 해 두면 사용자가 직접 값을 변경할 수 없다.
Test test = new Test();
test.sum = 10; // error
이렇게 직접 바꿀수 없다는 뜻이 된다.
요런게 캡슐화
그렇다면 두번째, static은 뭘까?
1) static은 변수와 메소드로 사용 가능하다.
static string developer_kim = "Good";
public static class Hello() {
System.out.println("hello!");
}
2) static으로 생성한 변수, 메소드는 메모리에 한 번 할당되어서 프로그램이 종료될때 해제된다. (가비지 컬렉터의 관리를 받는 Heap이 아니라 Static영역에 저장되므로)
이 말은 즉슨, 잘 사용하지도 않는 변수/메소드를 static으로 선언하는 경우 성능에 영향을 끼칠 수 있다는 의미가 된다. 왜냐면 그만큼 메모리를 잡아먹으니까!
근데 또 다른 한편으로는 자주 사용하는 인스턴스의 경우엔 static으로 만들어 놓고 사용한다면 성능에 좋다는 말이 된다. 즉, 잘 사용하면 득, 못 사용하면 실!
3) static은 메소드를 인스턴스 없이 실행할 수 있게 해 준다.
Test test = new Test();
이렇게 만들어서 접근하지 않아도 된다는 뜻이다. 근데 이 말은 반대로 객체지향의 특성을 깬다는 말이다. 붕어빵 틀에 붕어빵을 찍어내야되는데 왜 찍어내지 못하니!!
왜? 이건 왜 또 필요한걸까? 언제 써야 할까?
제일 쉬워 제일 좋아
이건 리턴값을 의미한다.
void는 말 그대로 아무것도 리턴하지 않는다는 거고 저 자리에 String, Integer, Array, 객체 등등 써서 리턴 값으로 전달할 타입을 선언하는 것
이렇게 오늘도 깨알 공부 끝!