Microsoft MVP성태의 닷넷 이야기
지역변수로 이해하는 메서드매개변수 게시글 댓글 [링크 복사], [링크+제목 복사],
조회: 12815
글쓴 사람
김태우
홈페이지
첨부 파일
 

클래스가 참조타입으로 대입되는 데서 오는 혼동은 parameter에 새로운 클래스를 생성시켜서 대입 하는 것 보다

internal class Program
{
    static void Main(string[] args)
    {
        MyClass instance = new MyClass { Id = 10 };
        Test(instance);
        System.Console.WriteLine(instance.Id); // 출력 결과: 20
    }

    static void Test(MyClass parameter)
    {
        parameter.Id = 20; // parameter 에 새로운 인스턴스 생성하지 않고 Id 값 변경
    }
}

위 처럼 parameter의 변수를 변경 하는 경우 인 듯 합니다. parameter에 새로운 인스턴스를 대입하지 않으면
참조대입으로 parameter의 값을 변경 할 때 instance의 Id 값이 변경 되어버립니다.
parameter에 새로운 인스턴스를 대입 했을 때에 비로소 영향을 미치지 못하는 것 같습니다.
(변수로 대입되는 parameter는 별칭의 개념으로 생각하는 것이 좋을 듯 합니다.)

원래글에는 댓글 저장이 안되서 질문 게시판에 남깁니다.








[최초 등록일: ]
[최종 수정일: 8/10/2023]


비밀번호

댓글 작성자
 



2023-08-10 11시34분
사실 그것도 (별칭보다는) 같은 (로컬 변수의) 원칙으로 이해할 수 있습니다. 제시하신 소스코드를 "https://www.sysnet.pe.kr/2/0/13399" 글의 내용에서 설명한 것처럼 지역 변수로 바꿔 보면,

    MyClass instance = new MyClass { Id = 10 };

    MyClass parameter = instance;
    parameter.Id = 20;

    Console.WriteLine(instance.Id); // 출력 결과: 20

왜 메서드 내에서 멤버를 변경한 것이 전달한 측의 instance 인자에도 영향을 미치는지 직관적으로 알 수 있습니다. 만약 위의 코드를 이해하지 못한다면 그것은 값/참조 형식 자체를 이해하지 못한 것이기 때문에 메서드를 생각할 단계가 아닐 것입니다.

(덧글이 안 써지는 문제는 퇴근 후 수정하겠습니다. ^^;)
정성태
2023-08-10 02시06분
넵. 다시 읽어보니 매개변수와 지역변수는 다르지 않다고 설명하는 문구가 첫줄에 있었는데 중간에 참조타입으로 instance변수에 영향을 못 미친다는 글에 의문이 들었었습니다. 답글 감사합니다.
김태우
2023-08-10 08시55분
덧글 쓰는 문제는 해결됐습니다. ^^;
정성태

... 16  17  18  19  20  21  22  [23]  24  25  26  27  28  29  30  ...
NoWriterDateCnt.TitleFile(s)
5380yeon9/3/202015487winform 의 datagridview는 바인딩이 안 되나요? [1]
5379guest9/2/202019247시작하세요! C# 8.0 프로그래밍 책에 오타가 있습니다. [3]
5378net9/2/202015706mes 응용프로그램을 .net 웹폼으로 만들기도 하나요? [2]
5377net9/2/202014045.net 사용한 웹폼으로 응용프로그램을 만들경우 [1]
5376영귤9/1/202015233nullable 타입간의 비교연산은 그냥 가능한 건가요? [1]
5375영귤8/30/202017132이벤트와 델리게이트의 차이가 궁금합니다. [2]
5374guest8/27/202019425시작하세요! C# 8.0 프로그래밍 책에 오타가 있습니다. [1]
5373agj8/26/202016555System.Single::ToString()함수의 IL코드를 보았는데 ldnull, throw가 전부입니다. 왜 이렇게 짧죠? [2]
5372민성8/24/202016580안녕하세요 WPF 웹브라우저 컨트롤에서 웹브라우저 자체를 엣지로 할 수가 있나요? [2]
5371서현준8/11/202015235Hyper-V 내부 네트워크 환경 중, VM 에서 인터넷 접속 [1]
5370독자8/11/202013407.net createobject 관련 질문입니다.. [4]
5369독자8/10/202013277c# 8.0 프로그래밍 책에 대한 질문 드립니다 [1]
5368guest8/10/202015588시작하세요! C# 8.0 프로그래밍 책에 오타가 있습니다. [1]
5367박순기8/8/202013561디버깅 시 반전되는 부분 글 색상이나 배경색을 변경하는 방법 [3]파일 다운로드1
5366간절함8/7/202014203하나의 솔루션에서, 32비트 프로젝트에서 다른 64비트 프로젝트 참조하는 방법 궁금합니다. [4]
5365영귤8/6/202013684TimeSpan 구할 때 시간대를 바꿔도 같은 값이 나오는 것 같습니다. [1]
5364박순기8/5/202013762visual studio의 menu bar font size 변경방법 문의 [2]파일 다운로드1
5363클락8/1/202014739c# 9.0 출간 준비 중이신가요? [2]
5361하태7/29/202013931안녕하세요! 바이너리데이터 파싱 질문 드리겠습니다!. [2]
5360진우7/28/202015142엑셀에서 발생하는 모든 이벤트를 감지 할수 있는지 궁금합니다. [6]파일 다운로드1
5358홍길동7/22/202013660개체에서 open 속성이나 매서드가 지원 되지 않읍니다.라고 오류창이 뜨는데. [1]
5357손동섭7/22/202014398책 예제코드... [3]
5355neska7/21/202013913안녕하세요 문의 드립니다 [1]
5354민성7/15/202016314안녕하세요 db연결 문자 보안 [2]
5353형성재7/14/202015021Visual Studio Setup Project에서 VC++2010재배포패키지설치 [4]
5352윤식7/10/202015567닷넷코어 빌드 시 runtimeconfig 파일을 없앨 수 있는지.. [4]
... 16  17  18  19  20  21  22  [23]  24  25  26  27  28  29  30  ...