[JAVA] 인터페이스의 데이터는 public static final로 정의하는 이유

박성용·2025년 3월 10일

JAVA, 너 뭔데?

목록 보기
1/5
post-thumbnail

인터페이스의 목적

자바에서 인터페이스는 다형성을 구현하고 구현 클래스들 간의 일관된 동작을 보장하기 위한 중요한 개념입니다. 인터페이스는 구현해야 할 동작을 정의하는 계약 역할을 하며, 이를 통해 클래스가 반드시 구현해야 하는 메서드들을 명시합니다. 인터페이스를 사용함으로써, 우리는 클래스의 구체적인 코드를 보지 않고도 어떤 메서드들이 반드시 포함되어야 하는지 파악할 수 있습니다.

인터페이스, 동작을 위한 계약서

따라서, 인터페이스는 구현해야 할 동작을 명시하는 것에 그 목적이 있으며, 구체적인 동작을 정의하는 것이 아니라 동작을 위한 계약을 제시합니다. 이 계약은 구현 클래스들이 반드시 따라야 하는 규칙을 제공하며, 그 내용이 메서드 시그니처에 해당합니다. 즉, 인터페이스는 어떤 메서드들이 존재해야 한다는 것을 정의하는 데 집중합니다.

이처럼 인터페이스는 동작을 규명하는 역할을 하며, 클래스에 있는 변수와는 달리 상수를 정의하는 데 적합합니다. 왜냐하면, 변수는 객체의 상태를 변화시키며, 동적으로 값을 변경하는 특성을 가지고 있기 때문입니다. 반면에, 상수는 불변의 값을 갖기 때문에 여러 클래스가 동일한 값을 공유하면서 일관성을 유지할 수 있도록 해줍니다.

상수 필드만 정의할 수 있는 이유에 대하여

인터페이스에서 상수 필드만을 정의할 수 있도록 제한하는 이유는, 인터페이스의 핵심 역할이 "구현해야 할 동작"을 정의하는 계약이기 때문입니다. 인터페이스는 구현에 대한 구체적인 내용을 다루는 것이 아니라, 어떤 메서드들이 존재해야 한다는 것을 명시하는 역할을 합니다. 이는 인터페이스의 주된 목적이 동작을 정의하는 것이지, 객체 상태를 관리하거나 동적으로 변하는 값을 관리하는 것이 아님을 뜻합니다.

따라서 인터페이스에서 상수만 정의할 수 있도록 하는 이유는 동작의 일관성을 유지하기 위함입니다. 상수는 변경되지 않는 값을 의미하므로, 모든 클래스가 동일한 값을 사용하게 하고, 이 값이 일관되게 유지되도록 보장합니다. 반면, 변수나 동적으로 변하는 값을 관리하는 것은 인터페이스의 목적에 맞지 않기 때문에 허용되지 않습니다

상수 필드의 중요성

  • 일관성 유지: 인터페이스에 정의된 상수는 모든 구현 클래스에서 동일한 값을 공유하며, 이는 객체들 간의 일관성을 보장합니다. 예를 들어, PI와 같은 상수는 여러 클래스에서 동일한 값을 사용하도록 하여 일관된 계산이나 동작을 보장할 수 있습니다.
  • 불변성 보장: 상수는 final 키워드로 선언되어 변경할 수 없는 값을 갖기 때문에, 프로그램 전반에 걸쳐 값이 변하지 않는 불변의 값을 사용할 수 있습니다. 이는 시스템의 안정성을 높이는 중요한 요소입니다.

public static final이 반드시 붙는 이유

터페이스에서 상수 필드는 반드시 public static final로 정의되며, 이 세 가지 키워드는 인터페이스 내에서 정의된 상수의 특성을 명확히 합니다.

  • public : 인터페이스는 다양한 클래스에서 구현될 수 있기 때문에, 인터페이스에서 정의된 상수는 어디서나 접근 가능해야 합니다. 즉, 상수는 공용으로 제공되어야 하므로 public으로 정의됩니다. 이를 통해 어떤 클래스에서든 동일한 상수 값을 사용할 수 있도록 합니다.

  • static: 상수는 클래스 레벨에서 공유되는 값이어야 하므로, static으로 선언됩니다. 즉, 상수 값은 클래스의 인스턴스에 종속되지 않고, 클래스 자체에서 공유되며 모든 객체가 동일한 값을 사용할 수 있도록 해야 합니다.

  • final: 상수는 불변이어야 합니다. final 키워드를 사용하여 값이 변경되지 않도록 보장합니다. 이로써 상수는 값이 고정되어, 여러 클래스에서 일관되게 사용할 수 있는 값을 제공하도록 보장해야 합니다.

따라서 public static final은 상수가 일관되게 유지되고, 프로그램 전반에서 안전하게 사용할 수 있도록 보장하는 역할을 하게 됩니다.

클래스와 인터페이스의 차이점

클래스와 인터페이스는 기능적으로 생각해보면 차이점이 크지만, 개념적으로 생각해보면 둘 다 추상화된 개념을 정의하고 설계하는 기능을 수행합니다. 그러나 둘의 큰 차이점은 목적에 있습니다.

주 목적에 따른 클래스와 인터페이스 비교

  • 클래스는 상태를 관리하는 설계도이면서, 구체적인 동작을 구현하는 역할을 수행합니다. 즉, 클래스는 객체의 상태와 행동을 정의하며, 객체가 어떤 정보를 가질지와 어떤 동작을 할지를 구현합니다. 이 때문에 클래스는 동적으로 변할 수 있는 값을 가질 수 있으며, 인스턴스 변수와 같은 가변적인 상태를 관리할 수 있습니다.
    -반면, 인터페이스는 상태를 관리하지 않습니다. 인터페이스는 구현해야 할 동작을 정의하는 계약에 집중하고, 동작을 위한 메서드 시그니처만 제공하며, 구체적인 구현을 강제합니다. 인터페이스는 상태 변화가 없고, 동적인 값을 관리하지 않으며, 동작에 필요한 메서드와 상수 값만을 정의합니다. 이로 인해 인터페이스에서는 상수만 정의할 수 있고, 동적으로 변하는 값을 관리하는 필드는 허용되지 않습니다

결론

결론적으로 인터페이스는 서로 다른 클래스들이 공통된 메서드를 사용하도록 하여 일관성을 유지하게 만들어야 하므로, 변경 불가능한 값을 모든 구현 클래스에서 동일하게 공유하여 일관성을 보장하기 위해 상수 필드만을 정의할 수 있도록 하는 것입니다. 상수는 값이 고정되어야 하며, 모든 클래스에서 동일한 값을 사용할 수 있도록 보장하는 역할을 합니다. 이를 위해 public static final의 키워드를 필수적으로 사용하여, 상수 값의 일관성과 불변성을 유지하게 됩니다.

따라서 인터페이스는 동작의 규칙을 제시하고, 상수는 일관된 값을 공유할 수 있도록 하여, 프로그램의 안정성과 일관성을 유지하는 중요한 역할을 합니다. 클래스와 인터페이스는 각자의 역할에 맞춰 상호보완적으로 사용되며, 이를 통해 효율적이고 확장 가능한 시스템을 설계할 수 있습니다.

profile
지속 가능한 개발과 꾸준한 성장을 목표로 하는 Web Developer 박성용입니다

0개의 댓글