인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

김영한의 실전 자바 - 기본편

static 파트의 MathArrayUtil 문제에 대해 질문있습니다

작성

·

46

·

수정됨

0

밑에 동일한 질문이 있긴한데 이해를 못하겠어서요

저는 이런식으로 sum이라는 private static으로 선언된 변수를 만들고 해당 변수를 사용해서 sum,average 메소드에 사용 했는데요 이렇게 비슷하게 사용하신분의 질문글의 답글을 보니까 클래스 변수를 쓰면 안되고 이유는 여러곳에서 해당 클래스를 사용하게 될 경우 sum의 값이 손상될 수 있다는 이유였는데요 private static을 쓰는데 어떻게 여러곳에서 sum 변수에 접근할 수 있는지 궁금합니다 private은 해당 클래스 내에서만 사용할 수 있는거 아닌가요? 만약 사용할 수 있다고 해도 private 이라는 접근제어자가 다른 곳에서 사용 하지 못하게 하려는 목적이라고 알고있는데 그럼 private을 이용하여야 하는 이유를 모르겠습니다

package static2.ex;

public class MathArrayUtils {
    private MathArrayUtils(){}
    private static int sum;

    static int sum(int[] values){
        for (int v : values) {
            sum += v;
        }
        return sum;
    }
    static double average(int[] values) {
        return (double)sum / values.length;
    }

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 김지협님.

Static 변수와 메소드에 대한 개념은 자바를 학습하는 데 있어 중요한 부분입니다. 질문하신 내용에서 이해를 돕기 위해 관련 설명과 함께 유사 질문 및 답변 링크를 소개해 드리겠습니다.

먼저 질문에 대한 간단한 설명을 드리자면:

  1. Static 변수와 메소드: Static 변수는 클래스 레벨에서 공유되기 때문에 클래스의 모든 인스턴스가 같은 값을 참조하게 됩니다. 클래스 메소드에서 직접 접근하는 것도 가능합니다.

  2. Private 접근 제어자: Static 변수라도 private으로 선언되면 클래스 밖에서 직접 접근할 수 없습니다. 하지만 클래스 내부에서는 자유롭게 접근할 수 있습니다. Private static 변수는 클래스의 인스턴스와는 무관하게 클래스 내부에서 공유되는 상태 정보로 사용될 수 있습니다.

  3. Singleton이나 유틸리티 클래스와의 관계: MathArrayUtils 클래스에서는 클래스 메소드에서 상태를 공유하기 위해 static 변수를 사용하고 있습니다. 이 경우, 여러 스레드에서 동시에 접근할 때 상태가 일관성 있게 유지되지 않을 수 있으므로 주의가 필요합니다.

관련 질문을 참고하시면 더 많은 예시와 구체적인 설명을 얻으실 수 있습니다:

이 질문들과 답변을 통해 저와 같은 고민을 하고 있었던 다른 학습자들의 해답을 얻을 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기