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

클래스가 참조타입으로 대입되는 데서 오는 혼동은 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)
5234koko9/25/201918783안녕하세요. 64bit WPF -> 32bit C++ DLL Import사용 문의 드립니다. [3]
5232fox3...9/24/201916109C# Memorymappedfile 재 업로드 드립니다.(실행순서 및 질문내용 정리) [7]파일 다운로드1
5231fox3...9/24/201915770C# 메모리맵드파일 관련 질문드립니다. 최소한의 재현가능코드 첨부후 재질문 드립니다. [2]파일 다운로드1
5230질문9/23/201915665C++ 로 만든 dll 을 C#에서 사용할 때 질문 [2]
5229fox3...9/23/201918267C# 메모리맵드파일 관련 질문드립니다. [2]
5227세퉁9/23/201918386WPF Textblock 폰트 크기에 따라 글자 색이 깨지는 현상이 있습니다. [3]파일 다운로드1
5226김대훈9/23/201916749정말 황당한 경우입니다.. [2]
5223김태균9/19/201916509책 소개 링크가 7.1버전판으로 이어집니다. [1]
5222냥냥이9/14/201916952프로그래밍 논리력이 많이 부족합니다 [3]
5219티지레몬9/9/201918837c# PCB 자동화 프로그램(윈도우 폼 위주로 작업) 제작 준비 [3]
5218민성9/9/201917284안녕하세요 WPF에서 xaml 안에 다른 xaml을 넣고 싶습니다. [1]파일 다운로드1
5216WPF9/8/201917973WPF에서 XAML Islands를 사용하여 Win2D를 사용하니 그래픽 품질이 저하됩니다. [2]파일 다운로드1
5215허송세월9/5/201917734중복실행 방지 관련 문의 [2]파일 다운로드1
5214Jang...9/4/201917014[DB 테이블의 데이터 변경에 대한 알림 처리] SQL-Server말고 MySQL은 불가능하겠죠? [1]
5213진우8/31/201916203c# 람다 변수 캡쳐 문의 [2]
5212심성보8/29/201918871Clipboard내 여러개의 이미지를 PictureBox로 불러오는 문제 [2]
5211최휘철8/24/201917725CLR20r3 관련된 윈도우 오류입니다. ㅠㅠ 도와주세요. / 아래글 관련하여 관련 파일 올려 드려요^^ [1]파일 다운로드1
5210최휘철8/23/201922744CLR20r3 관련된 윈도우 오류입니다. ㅠㅠ 도와주세요. [5]
5209세퉁8/21/201916978폰트 파일 속성 값을 가져오는 방법 질문 드립니다. [2]파일 다운로드1
5208홍길동8/19/201919346DebugDiag에서 .Net의 Stack Trace를 Windbg에서는 어떻게 볼 수 있나요? [3]
5207민성8/16/201916792네 소스 전체를 올리도록 하겠습니다. [2]파일 다운로드1
5206민성8/14/201917368전 재현 가능하다고 봤는데 다시올리도록 하겠습니다. [1]
5205miny...8/14/201916331안녕하세요 .WPF ListBox시 체크박스가 있는데 체크박스에서 체크가 되었는지 알수 있는 방법이 있을까요? [1]
5204영민8/8/201920949안녕하세요 디버깅시 콘솔창을 띠어서 볼수가 없나요? [7]
5202민성8/6/201916810WPF에서 <Application.Resources에 xaml에 있는 icon 값을 저장하고 xaml에 불러다 사용하고 싶은데요 [1]
5201김대훈8/3/201917109상속시 생성자에 대해 질문드립니다 [3]
... 16  17  18  19  20  21  22  23  24  25  26  27  [28]  29  30  ...