본문 바로가기

java/그 외 알게된 것들

Public / Static / default

public, static, default는 Java에서 클래스나 메서드의 접근 제어자와 속성을 정의하는 키워드로, 각각 다른 목적을 가지고 있다. 이 키워드들을 제대로 이해하기 위해서는 각자의 역할을 분리해서 생각하는 것이 중요하다. 아래에서 각각의 키워드가 무엇을 의미하는지 설명해 보겠다.

public

public은 접근 제어자로, 해당 클래스, 메서드, 변수에 대한 접근 수준을 정의한다.

  • 목적: 다른 클래스나 패키지에서도 접근할 수 있도록 허용하는 역할을 한다.
  • 사용 위치: 클래스, 메서드, 변수에 사용된다.
public class MyClass {
    public int number;
    public void printNumber() {
        System.out.println(number);
    }
}
  • public 클래스: 다른 패키지에서 해당 클래스를 사용할 수 있다.
  • public 메서드: 다른 클래스나 패키지에서 호출할 수 있다.
  • public 변수: 외부에서 해당 변수에 접근할 수 있다.

특징: 클래스나 메서드, 변수에 public을 붙이면 전역적으로 접근 가능하다. 이로 인해 해당 요소에 대한 제한이 없다.

 

static

static은 정적이라는 의미를 가진 키워드로, 클래스의 인스턴스를 생성하지 않고도 사용할 수 있는 메서드나 변수를 정의할 때 사용된다.

  • 목적: 인스턴스를 생성하지 않고 클래스 자체에서 바로 접근할 수 있도록 해준다.
  • 사용 위치: 변수, 메서드, 블록 등에 사용된다.
public class MyClass {
    public static int counter = 0;

    public static void increment() {
        counter++;
    }
}
  • static 변수: 클래스의 모든 인스턴스에서 공유된다. 즉, 해당 클래스의 모든 객체가 하나의 변수를 공유한다.
  • static 메서드: 클래스 인스턴스를 만들지 않고, 클래스 이름을 통해 메서드를 직접 호출할 수 있다. static 메서드는 객체 상태를 변경할 수 없고 객체에 속한 다른 메서드나 변수에 접근할 수 없다.

특징: static 키워드가 붙은 메서드나 변수는 클래스 수준에서 관리되며, 객체의 생성 여부와 관계없이 공유된다.

 

 

default

default는 Java 8에서 인터페이스에서 메서드에 기본 구현을 제공할 때 사용된다. 인터페이스는 기본적으로 메서드 선언만 할 수 있는데, Java 8부터는 인터페이스에 메서드의 구현을 제공할 수 있게 되었다.

  • 목적: 인터페이스에서 구현을 제공하여, 기존 인터페이스를 변경하지 않고도 새로운 메서드를 추가할 수 있다.
  • 사용 위치: 인터페이스에서 메서드에 사용된다.
public interface MyInterface {
    default void printMessage() {
        System.out.println("Hello from the interface!");
    }
}
  • default 메서드: 기존 인터페이스에 새로운 메서드를 추가하면서도, 기존 구현체에 영향을 주지 않고 새로운 메서드를 구현할 수 있다.

특징: 인터페이스에서 default 메서드를 사용하면, 구현 클래스가 해당 메서드를 반드시 구현하지 않아도 되며, 기본 구현을 제공할 수 있다. 이는 인터페이스의 변화 없이 하위 클래스가 이를 사용할 수 있게 해준다.


  • public: 접근 제어자, 모두가 접근 가능.
  • static: 클래스 수준에서만 존재, 인스턴스화 없이 클래스 이름으로 접근 가능.
  • default: 인터페이스의 메서드에 기본 구현을 제공, 기존 인터페이스에 새로운 메서드를 추가할 때 사용.

이 세 키워드를 함께 사용할 때, 각각의 특성을 명확히 이해하면 혼동을 줄일 수 있다. public은 접근 제어, static은 클래스 수준, default는 인터페이스에서 기본 구현을 제공하는 역할을 한다는 점에서 구분하면 된다.

'java > 그 외 알게된 것들' 카테고리의 다른 글

자바에서 length와 length()의 차이  (0) 2025.05.08
GET과 POST의 차이  (0) 2025.01.08
This  (0) 2024.05.03
20240412 중간 정리  (0) 2024.04.12
메서드 Method  (0) 2024.04.10