Public, Private, static

잉으잉·2024년 10월 24일

자바공부

목록 보기
2/9

자바 프로그램은 무조건 Public static void main()부터 시작한다. 아무 생각 없이 쓰다가 문득 생긴 의문. Public이 뭘 의미하지?

접근 제한자

접근 제한자는 다른 클래스나 인터페이스로부터 접근하는것을 통제하기 위해 사용된다. 여기서 클래스는 같은 프로젝트 내 다른 java 파일을 생각하면 된다. 접근 제한자에는 public, protected, private가 있다. 접근 제한자가 설정되지 않으면 default 접근제한을 가진다.

  • public : 어떠한 곳에서도 자유롭게 참조가 가능하다.
  • private : 외부 클래스에서 참조할 수 없다. 오직 클래스 내부에서만 사용 가능
  • protected : 같은 패키지 혹은 자식 클래스에서는 사용할 수 있다.
  • default : 같은 패키지에 소속된 클래스만 사용할 수 있다.

접근 제한자는 이제 알겠고, 그럼 static은 뭐지?

정적 메소드와 인스턴스 메소드

  • 인스턴스 메소드는 일반적으로 public method명(){}으로 정의되는 메소드이다. 선언된 클래스 객체를 통해서만 호출할 수 있다. 예를 들면 다음과 같다.
public class Student{
	public String grade(){
    //인스턴스 메소드 정의
    	}
	public static void main(args){
    	Student yehun = new Student;
        yehun.grade = "F";
        }
}

위와 같이 클래스를 선언을 해줘야 클래스 안의 메소드를 호출할 수 있다.

  • 정적 메소드는 public static method명(){}으로 정의되는 메소드이다. 클래스를 별도로 선언하지 않아도 메소드를 호출할 수 있다. 클래스를 선언해도 되지만, 권장되지는 않는다.
public class Student{
	public static String grade(){
    //정적 메소드 정의
    	}
	public static void main(args){
        Student.grade = "F";
        }
}
  • 그렇다면 어떨 때 정적, 인스턴스 메소드를 사용하면 좋을까?
    정적 메소드 : 유틸리티 함수를 만들 때
    예를 들면 다음과 같다.
max(1,2) // 2
min(1,2) // 1

별도로 선언하지 않아도 메소드를 호출할 수 있는 점에서 참 편리하다. 그렇다고 남발하는 것은 금물. 기본적으로 static은 객체지향에서 벗어난 개념이기 때문에 객체의 캡슐화를 위해서는 필요할 때만 사용하는 것이 좋다.

출처
1. https://hongong.hanbit.co.kr/%EC%9E%90%EB%B0%94-%EC%A0%91%EA%B7%BC-%EC%A0%9C%ED%95%9C%EC%9E%90%EC%9D%98-%EC%A2%85%EB%A5%98%EC%99%80-%EC%B0%A8%EC%9D%B4public-protected-private/
2. https://ykh6242.tistory.com/entry/Java-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EB%A9%94%EC%86%8C%EB%93%9Cinstance-methods%EC%99%80-%EC%A0%95%EC%A0%81-%EB%A9%94%EC%86%8C%EB%93%9Cstatic-methods%EC%9D%98-%EC%B0%A8%EC%9D%B4

profile
컴퓨터 앞에 앉은 나는 개발자

0개의 댓글