어떤 클래스의 변수를 다른 클래스에서 참조하고 싶습니다.

조회수 1367회

안녕하세요. C# 초보입니다... 여태까지 C만 쓰다가 c# 기초를 다지고 있는 중인데.. 예를 들어서


public class A
{
    public string a;
    public int b;
}

public class B
{
    var tmp = new A();
    tmp.a = null;
    tmp.b = 0;
}
public class C
{
   //B에서 변경된 값을 호출하고 싶은 부분!
}

위와 같이 A클래스에서 선언된 변수들을 B 클래스에서 초기화 시키고, 그 다음에 B에서 변경된 값을 C클래스에서 호출을 하고 싶은데요 static을 사용하게 되면 캡슐화라는 속성 규칙을 깨뜨리게되는 것이니 가급적 사용하고 싶지 않고 어떤 방법을 써야 할지 의견 좀 부탁드리겠습니다. ㅜㅜㅜㅜ

  • 이미 필드속성을 public 으로 한 것 부터가 캡슐화정책에 위배되는 것입니다. private 로 선언하고 getter/setter 를 정의하세요 c#에서는 field { get; set;} 편리한 형태로 제공됩니다. 질문이 이해가 안됩니다. B에서 변경된 값을 호출하고 싶은 부분이라는 것이 구체적으로 무슨 의민가요? 객체의 속성이 변할때 통지를 하고 싶은거에요? 정영훈 2019.1.7 15:27
  • 아아 그렇군요 ㅠㅠ 접근 제한자를 private로 바꿔야 위배가 되지 않는군요.. 제가 말씀드리는 질문은 수시로 A의 변수 값을 바꿔주는 B클래스가 있고 특정 조건에 따라 A의 변수를 수시로 참조하는 C클래스를 어떤 방식으로 짤 수 있을지에 대한 것입니다! 감사합니다 이준서 2019.1.7 16:21
  • a객체의 변수를 변경하는 b객체가 있다는 의미이죠? 클래스는 조작할 수 있는 대상이 아닙니다. 보통 예를 들때 class를 붕어빵틀에 비유하죠 실제 찍어나오는 붕어빵을 객체로 보구요. b객체의 속성등이 변경될 때 무엇을 해야 된다는 건가요? 정영훈 2019.1.7 16:31
  • 사실 만드려고 했던 것이 여러개의 클래스들이 하나의 변수를 참조하고 또 변경할 수 있는 형태였는데요. 그 변수를 효율적으로 관리하고자 클래스를 하나 선언하여 집어넣었고, 위처럼 B와 C같은 다른 클래스들이 A클래스에 선언된 객체를 조건에 따라 참조하고 또 변경하는 형식을 짜는 방안에 대한 질문이었습니다! 이준서 2019.1.7 16:40

2 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    특정 class의 instance에 데이터를 담아서 여러 class에서 이를 수시로 변경하거나 참조하는 경우에는 Singleton Pattern을 활용하는게 좋습니다.

    C#에서 Singleton Pattern을 구현하는 방법은 다양하기 때문에 아래 링크를 참조해주세요.

    http://csharpindepth.com/articles/general/singleton.aspx

    • 부연을 드리자면, C언어만 접하다가 C#을 처음 접하신 것이라면 C#문법을 먼저 공부하는 것보다 OOP 개념부터 이해하시는게 좋습니다. Abstract, Encapsulation, Polymorphism 핵심 개념을 이해하지 못한 상태에서 문법을 공부하는 것은 비효율적입니다. Peter 2019.1.7 17:06
    • 감사합니다! 이준서 2019.1.7 17:24
  • 첫번재 가장 쉬운방법은 static 을 사용하는 것 입니다.

    그런데 좋은 방법은 아닙니다.

    추천 드리는 방법은 Registry Pattern 입니다..

    http://wiki.c2.com/?RegistryPattern

    싱글턴 패턴으로 객체를 생성하고 그 객체에서 map이나 list를 이용하여 변수들를 관리하는 겁니다. 이렇게하면 객체는 유일하기 때문에 전역변수를 관리할 수 있습니다.

    이 방법도 jvm에 한해 유일하기 때문에 클러스터링된 구조라면 동기화하는 장치가 필요할 수 있습니다.

    싱글턴 패턴이 무엇인지 모른다면...학습을 해보세요 객체생성 패턴이고 구조가 간단합니다. 물론 이것도 static 을 사용하긴 합니다.

    • 엇 윗분이 벌써 달았군요-.-... 정영훈 2019.1.7 18:20
    • 죄송합니다.. 어쩌다보니 제가 새치기한 것 처럼 되었네요 ^^; Peter 2019.1.8 11:27
    • 아닙니다^^; 정영훈 2019.1.8 18:01

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.