Programming/객체 지향 프로그래밍(OOP)

OOP 개념: static과 final의 다차원배열

vita12321 2023. 9. 25. 08:00
728x90
반응형

이번 글에서는 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 핵심 요소 중 하나인 'static' 'final의 다차원 배열'입니다. 이전에는 static final 배열에 대한 기본적인 개념을 살펴봤지만, 이번 글에서는 좀 더 복잡한 형태인 다차원 배열에 대해 깊게 파고들겠습니다.


1. static이란 무엇인가?

 

먼저, static이란 Java와 같은 객체 지향 언어에서 사용되는 키워드로, 클래스 수준에서 작동하는 변수나 메소드를 선언하는 데 사용됩니다. 그 말은 즉슨, 해당 변수나 메소드는 클래스의 모든 인스턴스가 공유한다는 것입니다. 이렇게 클래스 수준에서 작동하므로, 객체(즉 인스턴스)를 생성하지 않고도 접근할 수 있습니다.


2. static을 사용하는가?

 

그렇다면 왜 우리는 static을 사용할까요? 여기에는 몇 가지 이유가 있습니다:

 

  • 상태 공유: 같은 클래스의 모든 객체들이 같은 값을 공유해야 하는 경우 유용합니다. 예를 들어 게임 내에서 모든 플레이어가 공유해야 하는 최고 점수 정보를 관리할 때 주로 사용됩니다.

 

  • 메모리 효율성: 동일한 데이터를 모든 인스턴스마다 별도로 저장하지 않고 한 번만 저장하여 메모리를 절약할 수 있습니다.

3. final 다차원 배열이란 무엇인가?

 

다음으로 final 다차원 배열에 대해서 알아보겠습니다. final 다차원 배열은 그 크기와 참조(즉 해당 배열이 가르키고 있는 위치) 자체가 변경되지 않음을 의미합니다. , 한번 생성된 후에는 그 크기를 변경하거나 다른 배열로 참조를 변경할 수 없습니다.

 

그러나 여기서 중요한 것은 final 키워드가 붙어 있다고 해서 그 안의 내용물까지 변경할 수 없다는 의미는 아니라는 점입니다! 따라서 final 키워드와 함께 선언된 배열의 각 요소값은 변동될 가능성이 있음을 명심해야 합니다.


4. final 다차원 배열을 사용하는가?

 

final 키워드를 이용한 상수 선언: 프로그래밍 시 상수 값들을 보관하기 위해서 주로 사용합니다. 예를 들어, 게임에서 변경되지 않아야 하는 기본 설정값이나, 과학 계산에서의 물리적 상수 등을 저장하는데 유용합니다.

 

  • 값 보호: 프로그램 실행 도중 값이 바뀔 일이 없음으로써 오류 발생 가능성을 줄일 수 있습니다. 즉, final 배열은 그 참조가 한 번 정해지면 변경되지 않으므로 의도치 않은 참조 변경으로 인한 버그를 방지할 수 있습니다.

5. static final의 다차원배열 구현하기

 

Java 언어 기준으로 Student 클래스 내부에 SUBJECTS라는 이름의 private static final String[][] 변수를 가지고 있다고 가정하겠습니다. 이 변수는 모든 Student 객체들이 공유하며, 학생들이 수강 가능한 전체 과목 목록과 그 하위 분류를 나타냅니다.

 

예시 코드:

public class Student {

 

    private static final String[][] SUBJECTS = {{"Math", "Algebra"}, {"Science", "Physics"}, {"English", "Literature"}}; // Static Final 2D Array

 

    public Student() {

        // constructor

    }

 

    public static String[][] getSubjects() {

        return SUBJECTS;

    }

}

 

위 예제에서 `SUBJECTS` 필드는 static final 2D(다차원) 배열로, 모든 Student 객체들이 이 값을 공유합니다.


6. static final 다차원 배열을 통한 데이터 접근

 

static 변수나 메소드에 접근하는 방법은 인스턴스 생성 없이도 클래스 이름을 통해 접근할 수 있습니다. 그러나 final 다차원 배열의 경우 내부의 값은 변경 가능하므로 주의가 필요합니다.

 

예시 코드:

Student s1 = new Student();

System.out.println(Arrays.deepToString(Student.getSubjects())); // "[[Math, Algebra], [Science, Physics], [English, Literature]]" 출력

7. 주의사항

 

static final 다차원 배열을 사용할 때는 몇 가지 주의사항이 있습니다:

 

1) 첫째로는 앞서 말했듯이, final 다차원 배열은 참조 자체는 변경할 수 없지만, 그 안에 들어있는 값들은 변경 가능합니다. 따라서 final 키워드가 붙어 있다고 해서 안심하고 값을 바꾸려다가 버그를 만들 가능성이 있습니다.

 

2) 둘째로, 정적 변수(static variable)는 모든 인스턴스에서 공유되므로, 한 인스턴스에서 값이 변경된 면 다른 모든 인스턴스에서도 그 변경 사항이 반영됩니다. 이 점을 잘 이해하지 못하면 예상치 못한 부작용을 초래할 수 있습니다.


8. static final의 다차원 배열 활용 사례

 

이제 static final의 다차원 배열을 어떻게 활용할 수 있는지 알아보겠습니다.

 

예를 들어, 우리가 여러 학생들이 참여하는 온라인 퀴즈 게임을 만든다고 가정해 봅시다.이 게임에서는 모든 학생들이 동일한 질문 세트에 답해야 하며, 각 질문은 주제와 난이도로 분류됩니다.

public class QuizGame {

 

    private static final String[][] QUESTIONS = {

        {"Math", "Easy", "What is 2 + 2?"},

        {"Math", "Hard", "What is the integral of x^2?"},

        {"Science", "Easy", "What is the chemical symbol for water?"},

        // more questions...

    };

 

    public QuizGame() {

        // constructor

    }

 

    public static String[][] getQuestions() {

        return QUESTIONS;

    }

}

 

위 코드에서 `QUESTIONS` 필드는 모든 `QuizGame` 인스턴스가 공유하는 static final 2D 배열입니다. 이렇게 하면 메모리를 효율적으로 사용하면서도 모든 게임 참가자가 동일한 질문 세트에 접근할 수 있습니다.


9. 결론

 

객체 지향 프로그래밍에서 'static' 'final 다차원 배열'은 중요한 개념입니다. 이를 통해 상태를 공유하거나 변하지 않아야 하는 값을 관리하는 데 유용합니다.

 

그러나 이러한 기능들을 사용할 때에는 주의사항도 존재합니다. static 변수는 모든 인스턴트 간에 공유되므로 값 변경 시 영향 범위를 잘 이해하고 사용해야 하며, final 다차원 배열은 참조 자체만 불변인 것으로 내부 요소값은 변동될 수 있다는 것 등을 명심해야 합니다.

 

객체 지향 프로그래밍의 여러 요소들은 각각의 장단점과 특성이 있으므로 상황에 따라 적절하게 활용하는 것이 중요합니다.'static' 'final 다차원 배열'역시 그러한 요소 중 하나이며, 이러한 개념들을 잘 이해하고 활용한다면 보다 효과적인 프로그래밍이 가능할 것입니다.

 

마지막으로, 'static' 'final 다차원 배열'은 매우 강력한 도구이지만 제대로 사용하지 않으면 예상치 못한 결과를 초래할 수 있습니다. 따라서 이러한 개념들을 사용할 때는 항상 주의 깊게 접근해야 합니다.

728x90
반응형

 

728x90
반응형