본문 바로가기

Information Technology

[JAVA 기초] Static과 Public

이 글은 개인의 학습을 목적으로 정리한 글입니다. 이점 참고하고 읽어주세요;)


JAVA에서 프로그램이란 클래스의 집합입니다.

클래스 외부에 존재할 수 있는 건 아무것도 없습니다.

static 멤버 = class 멤버

non-static 멤버 = object 멤버

 

main 함수 없이 클래스만으로는 프로그램이 진행될 수 없습니다.

때문에 main 함수가 꼭 필요한데, 프로그램을 진행하는 main 함수를 다른 클래스에서 사용한다면 문제가 발생하기 때문에 main 메서드는 반드시 static이어야합니다.

클래스에 소속되어있는 멤버인 static 멤버는 오직 static 멤버만 사용할 수 있습니다.

 

때문에 main 메서드에서 non-static 멤버에 접근하려면 해당 클래스의 객체를 new를 통해 생성한 뒤에 그 객체에서 불러와 접근 및 사용해야 합니다.

또한 다른 클래스의 static 멤버를 호출하고 싶다면, 새로운 객체를 생성해서 static 변수를 호출하기보다는 클래스 이름으로부터 그 static 메서드를 호출하는 게 바람직합니다.


그렇다면 static 메서드와 필드의 용도는 무엇일까요? 일단 가장 필수적인 용도는 main 메서드의 생성입니다. 그 이유는 위에서 적었으니 생략하겠습니다.

두 번째 이유는 상수 혹은 클래스 당 하나만 유지하고 있으면 되는 값에 사용할 때입니다. 수학 기능 관련 클래스인 Math 클래스에서 PI 값은 오직 하나이기 때문에 Math.PI가 그 예시 중 하나입니다.

또한 순수하게 기능만으로 정의되어 특별히 다른 객체에서 새롭게 정의할 필요가 없는 함수들 역시 static을 사용합니다. Math 함수에서의 여러 기능들이 그 예시 중 하나입니다.


static에 대해 알아봤으니, 이젠 public에 대해 알아보겠습니다.

public은 예를 들어 A 클래스가 있을 때 B 클래스에서 A클래스의 멤버 변수, 또는 멤버 함수를 사용할 수 있게 해주는 접근제어자입니다.

 

반면, B클래스에서 A클래스의 멤버를 사용하지 못하게 만드는 접근 제어자가 private입니다. private 메서드는 오직 동일 클래스 내에서만 접근할 수 있습니다.

그렇다면 private을 사용하는 이유는 무엇일까요? private을 사용하는 이유는 바로 데이터 캡슐화 때문입니다.

 

 

데이터 캡슐화란, 데이터의 접근 가능 가능성을 획일적으로 줄여서 무결성이 중요한 데이터가 의도치 않게 변조되는 걸 방지하는 방법입니다. 오직 동일 클래스 내의 메서드를 통해서만 private 멤버에 접근할 수 있습니다. 그 메서드가 public일지라도 private 멤버가 속한 클래스에 존재하는 메서드이기 때문에 private 멤버에 접근이 가능하기 때문입니다.

만약 A클래스에서 priavte 멤버의 값을 가져오는 get 메서드만 생성하고, 값을 변경하는 set 메서드는 만들지 않는다면 다른 클래스에서는 A클래스의 private 멤버의 값을 가져오고 확인만 할 수 있을 뿐 변경하지는 못합니다. 

 

 


JAVA 언어는 결국 클래스를 중심으로 돌아가고, 클래스를 중심으로 돌아간다는 말은 패키지 내에서 다른 클래스를 참조하고 또 제공해주는 방식으로 돌아간다는 의미이기 때문에 다른 클래스를 사용하는 데 영향을 주는 public, private, protected 등에 대해 알고 있는 건 정말 중요합니다.