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

클래스가 참조타입으로 대입되는 데서 오는 혼동은 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분
덧글 쓰는 문제는 해결됐습니다. ^^;
정성태

... 31  32  33  34  35  [36]  37  38  39  40  41  42  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
4993학생6/3/201814488질문 드립니다 [1]
4991최진안5/24/201814821Credential Provider 질문 [2]
4990heyg...5/21/201815282Sybase Adaptive Server Anywhere 6 버전에 대한 질문입니다. [9]
4989강한음5/18/201818148clickonce 배포 후 실행 무응답 [4]
4988C#7....5/17/201814110dynamic 키워드를 사용한 객체 핸들링에 대해서 여쭤보려고 합니다. [1]
4987포플러5/14/201815736닥터왓슨 로그 - c0000005 (액세스 위반) 분석 부탁드려도 될까요? [2]
4986익명5/14/201817701비주얼 스튜디오 wpf 프로젝트에서 어떻게 하면 exe파일과 실행에 필요한 파일들을 분리해서 정리해서 디렉토리로 묶을 수 있을까요? [4]
4985대구개발자5/7/201815219새로운 폴더만 "이름 없는 파일" 오류 [1]
4984안중언5/6/201816182교재 143page [1]
4983익명5/4/201826223(wpf) 다른 컴퓨터에서 사용하면 자꾸 ('CefSharp.Core.dll' 또는 여기에 종속되어 있는 파일이나 어셈블리 중 하나를 로드할 수 없습니다)라고 떠요.ㅠㅠ [5]
4982Soul...4/27/201816365MFC ActiveX 컨트롤 안에 있는 C# ActiveX 컨트롤 포인터 얻기 [4]
4981대전박4/25/201815096WPF IValueConverter 를 구현해서 StaticResource로 사용할때요 [1]
4980대전박4/23/201816454WPF OS버전 따라 Style 적용이 안되는 프로퍼티가 있을수 있나요? [2]
4979초보개발자4/18/201821342C# 프레임워크 버전이 다른 DLL끼리의 사용 [7]파일 다운로드1
4977Soul...4/17/201815896WebBrowser 컨트롤 Script 통신 문제 [3]
4976맹가이버4/14/201816844윈도우 서비스 프로그램에서 응용프로그램 호출하는 법 [1]
4975lemo...4/11/201817389안녕하세요 네이버로그인관련 질문드립니다. [2]
4973홍길동4/6/201815218ebook 출간 계획은 없으신가요? [2]
4978홍길동4/17/201814956    답변글 [답변]: ebook 출간 계획은 없으신가요?
4972dwkim4/3/201816057EasyHook 관련 질문 [4]
4968최홍준3/30/201814800Windows 7 Credential Provider Android와 연동 [1]
4967이대희3/30/201815794비주얼 스튜디오 설치 워크로드 중에 ".NET Core 플랫폼 간 개발" 이건 뭐하는 것인지요. [1]
4965이대희3/30/201815325자마린 설치후 안드로이드 프로젝트 생성시 디자이너가 없다는 에러가 발생합니다. [3]
4969이대희3/31/201815827    답변글 [답변]: 자마린 설치후 안드로이드 프로젝트 생성시 디자이너가 없다는 에러가 발생합니다.파일 다운로드2
4970이대희4/1/201815318        답변글 [답변]: [답변]: 자마린 설치후 안드로이드 프로젝트 생성시 디자이너가 없다는 에러가 발생합니다. [1]
4963이대희3/29/201815675UWP 스터디를 위해 찰스페졸드 저자의 Programming Windows 6판은 어떠한지요? [1]
... 31  32  33  34  35  [36]  37  38  39  40  41  42  43  44  45  ...