Section 31.2: 두개의 다른 변수에 할당된 값이 함께 변경되는 예제

public static void Main(string[] args) { var studentList = new List < Student > (); studentList.Add(new Student("Scott", "Nuke")); studentList.Add(new Student("Vincent", "King")); studentList.Add(new Student("Craig", "Bertt")); // 이후 출력에 사용할 별도의 리스트를 생성한다 var printingList = studentList; // 새로 생성된 리스트 객체이지만, 내부적으로는 동일한 Student 객체들을 가지고 있다 // 각 이름들에서 발견된 오타를 수정한다 studentList[0].LastName = "Duke"; studentList[1].LastName = "Kong"; studentList[2].LastName = "Brett"; // 이제 리스트를 출력한다 PrintPrintingList(printingList); } private static void PrintPrintingList(List < Student > students) { foreach(Student student in students) { Console.WriteLine(string.Format("{0} {1}", student.FirstName, student.LastName)); } }

이 예제에서, printingList 리스트는 학생들의 이름에 존재하는 오타를 수정하기 전에 생성되었지만, PrintPrintingList() 메소드 실행 시 오타가 교정된 이름들이 출력됨을 확인할 수 있다:

Scott Duke Vincent Kong Craig Brett

이는 바로 두 리스트가 모두 동일한 학생 객체들에 대한 참조값을 가지고 있기 때문이다. 따라서 실제 참조의 대상이 되는 Student 객체의 값이 변경되면, 두개의 리스트 모두에 해당 변경사항이 전파된다.

아래 코드는 Student 클래스의 대략적인 모습이다.

public class Student { public string FirstName { get; set; } public string LastName { get; set; } public Student(string firstName, string lastName) { this.FirstName = firstName; this.LastName = lastName; } }
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts