본문 바로가기
Programming/객체 지향 프로그래밍(OOP)

OOP 개념: 정적필드와 메소드를 위한 키워드 static

by vita12321 2023. 9. 21.
728x90
반응형

이번 글에서는 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 요소 중 하나인 '정적 필드와 메서드를 위한 키워드 static'에 대해 자세하게 알아보겠습니다. 이전 글에서는 클래스의 생성자에 대해 배웠으니, 이제 클래스 레벨에서 사용되는 정적 필드와 메서드에 대해 더 깊게 살펴보겠습니다.


1. 정적 필드와 메서드란 무엇인가?

 

객체 지향 프로그래밍에서 '정적(static)'은 클래스 레벨에서 사용되는 필드와 메서드를 의미합니다. 일반적으로, 필드와 메서드는 객체(클래스의 인스턴스)가 생성될 때마다 각각의 인스턴스에 할당됩니다. 그러나 'static' 키워드가 붙은 필드와 메서드는 클래스 단위로 한 번만 생성되며, 모든 인스턴스들이 공유합니다.


2. 왜 정적을 사용하는가?

 

정적 멤버(필드를 및 메서드를 포함)는 여러 가지 용도로 사용됩니다:

 

  • 공유 데이터: 모든 인스턴스가 공유하는 데이터를 저장하기 위해 정적 필드를 사용할 수 있습니다.

  • 유틸리티 함수: 객체의 상태에 영향을 주지 않고 독립적으로 작동하는 함수를 만들기 위해 정적 메서드를 사용할 수 있습니다.

 

또한, static 변수는 프로그램이 시작할 때 초기화되며 프로그램이 종료될 때까지 계속 존재하므로 전역 변수처럼 작동합니다.


3. 정적 구현하기

 

Java 언어 기준으로 Dog 클래스 내부에 breedCount라는 이름의 private static int 변수를 가지고 있다고 가정합니다. 이 변수는 Dog 클래스로 만든 모든 개체가 공유하는 변수입니다.

 

예시 코드:

public class Dog {

 

    private String name;

    private int age;

    private static int breedCount = 0; // Static Field

 

    public Dog(String name, int age) {

        this.name = name;

        this.age = age;

        breedCount++; // Increment count whenever a new instance is created

    }

 

    public static int getBreedCount() { // Static Method

        return breedCount;

    }

}

 

이 코드에서 breedCount는 모든 Dog 객체에 의해 공유되는 정적 필드입니다. Dog 객체가 생성될 때마다 breedCount 값이 증가합니다. getBreedCount() 메서드는 정적 메서드로, 이 메서드를 통해 현재까지 생성된 Dog 객체의 수를 얻을 수 있습니다.


4. 정적을 통한 데이터 접근

 

정적 멤버에 접근하려면, 일반 멤버처럼 객체 참조를 통하지 않고 직접 클래스 이름을 통해서 접근할 수 있습니다.

 

예시 코드:

Dog myDog = new Dog("Rex", 5);

Dog yourDog = new Dog("Max", 4);

 

System.out.println(Dog.getBreedCount()); // "2" 출력

 

위의 예제에서 `getBreedCount()` 메서드는 `Dog` 클래스를 사용하여 직접 호출되었습니다. 이것은 정적 메서드의 주요한 특징 중 하나로, 인스턴스 생성 없이도 호출 가능하다는 것입니다.


5. 주의사항

 

정적 필드와 메서드를 사용할 때 주의해야 할 몇 가지 사항이 있습니다:

 

  • 정적 메서드를 내부에서 인스턴스 변수나 인스턴스 메서드에 직접 접근할 수 없습니다.
  • 무분별한 static 사용은 프로그램의 상태 관리를 복잡하게 만들 수 있으므로 적절히 사용하는 것이 중요합니다.

6. 결론

 

객체 지향 프로그래밍에서 '정적'은 클래스 레벨의 필드와 메서드를 선언하는 데 사용되는 중요한 키워드입니다. 이를 통해 모든 인스턴스가 공유하는 데이터를 저장하거나, 객체의 상태에 영향을 주지 않는 독립적인 함수를 만들 수 있습니다.

 

또한, 정적 멤버는 객체 생성 없이 직접 클래스 이름을 통해 접근할 수 있다는 장점이 있습니다. 이런 기능은 코드의 유연성을 높여줍니다.

 

하지만, 정적 멤버를 사용할 때에는 주의사항도 존재합니다. 정적 메서드 내부에서 인스턴스 변수나 메서드에 직접 접근할 수 없으며, 무분별한 static 사용은 프로그램의 상태 관리를 복잡하게 만들 수 있습니다. 따라서 필요한 경우와 적절한 상황에서만 사용하는 것이 좋습니다.

 

정리하면, 'static' 키워드의 활용 방법과 그로 인해 발생하는 동작 및 제약 사항을 이해하는 것은 객체 지향 프로그래밍에 있어 중요한 요소 중 하나입니다. 이러한 개념들은 데이터 공유, 코드 재사용성 및 유지 관리성 증진 등 다양한 혜택을 제공하지만 동시에 주의가 필요합니다.

728x90
반응형

 

728x90
반응형