푸터 콘텐츠로 바로가기
.NET 도움말

C# Getter Setter (개발자용 작동 방식)

Getter와 Setter는 C#과 같은 객체 지향 프로그래밍 언어의 필수 개념입니다. 이 두 메소드는 클래스 프로퍼티의 접근 및 수정을 제어할 수 있게 해줍니다. 이 튜토리얼에서는 코드 블록을 사용하여 C# getter와 private setter의 초급 및 중급 측면을 탐구할 것입니다.

Getter와 Setter 소개

Getter와 Setter란 무엇입니까?

기본적으로 getter와 setter는 클래스 내의 비공개 변수를 접근할 수 있게 하는 메소드에 불과합니다. getter는 비공개 필드 변수의 값을 반환하고, setter는 이를 수정합니다. 이 메소드는 클래스의 내부 데이터(필드)가 안전하고 올바르게 접근되거나 수정되도록 보장합니다.

왜 필요할까요?

Imagine having a public class Car with a private string description property. 이 클래스 외부의 누군가가 설명을 알고 싶어도 비공개이므로 직접 접근할 수 없습니다. 여기서 getter와 setter의 역할이 등장합니다.

getter는 사용자가 private string description의 값을 직접 수정하지 않고도 값을 가져올 수 있게 해줍니다. 반면에, setter는 우리가 설정한 조건에 따라 사용자가 설명을 수정할 수 있게 해줍니다.

접근 한정자

접근 한정자는 클래스 외부에서 필드나 프로퍼티의 가시성과 접근 수준을 정의합니다. 가장 일반적으로 사용되는 수정자는 publicprivate입니다.

  • Public: public으로 선언된 필드 또는 속성은 프로그램 어디서든 접근할 수 있습니다. 예를 들어, 코드의 어느 부분에서도 접근 및 수정할 수 있는 public int Age 속성을 가질 수 있습니다.
  • Private: private으로 선언된 속성 또는 필드는 정의된 클래스 내에서만 접근할 수 있습니다. 예를 들어 private int age. 이 캡슐화는 불법적인 수정을 방지하고 클래스의 내부 상태가 올바르게 유지되도록 도와줍니다.

간단한 Getter와 Setter

간단한 예시로 시작해 봅시다.

using System;

public class Person
{
    private string name;  // This is a private string name property variable

    // This is the getter
    public string GetName()
    {
        return name;
    }

    // This is the setter
    public void SetName(string newName)
    {
        name = newName;
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person();
        person.SetName("John");
        Console.WriteLine(person.GetName());
    }
}
using System;

public class Person
{
    private string name;  // This is a private string name property variable

    // This is the getter
    public string GetName()
    {
        return name;
    }

    // This is the setter
    public void SetName(string newName)
    {
        name = newName;
    }
}

class Program
{
    static void Main()
    {
        Person person = new Person();
        person.SetName("John");
        Console.WriteLine(person.GetName());
    }
}
Imports System

Public Class Person
	Private name As String ' This is a private string name property variable

	' This is the getter
	Public Function GetName() As String
		Return name
	End Function

	' This is the setter
	Public Sub SetName(ByVal newName As String)
		name = newName
	End Sub
End Class

Friend Class Program
	Shared Sub Main()
		Dim person As New Person()
		person.SetName("John")
		Console.WriteLine(person.GetName())
	End Sub
End Class
$vbLabelText   $csharpLabel

위의 class Person에서는 name 속성을 위한 getter (GetName)와 setter (SetName)를 모두 가지고 있습니다. 당신이 static void Main 메소드를 실행할 때, setter를 사용하여 이름에 'John' 값을 설정했기 때문에 'John'이 출력됩니다.

자동 구현된 프로퍼티

이제, "게터와 세터를 위해 항상 별도의 메서드를 작성해야 하나요?"라고 생각할 수 있습니다. 대답은 "아닙니다." C#은 이를 단순화하기 위해 "자동 구현 속성" 또는 "자동 속성"이라는 개념을 도입했습니다.

C#에서 자동 속성을 사용할 수 있으며, 이는 private field 및 관련 속성을 선언하는 간편한 방법을 제공합니다. 다음은 예시입니다.

using System;

public class Student
{
    public string Name { get; set; } // This is an auto-implemented or automatic property
    public string Title { get; set; } // Another auto-implemented property
}

class Program
{
    static void Main()
    {
        Student student = new Student();
        student.Name = "Alice";  // Using setter
        Console.WriteLine(student.Name);  // Using getter
    }
}
using System;

public class Student
{
    public string Name { get; set; } // This is an auto-implemented or automatic property
    public string Title { get; set; } // Another auto-implemented property
}

class Program
{
    static void Main()
    {
        Student student = new Student();
        student.Name = "Alice";  // Using setter
        Console.WriteLine(student.Name);  // Using getter
    }
}
Imports System

Public Class Student
	Public Property Name() As String ' -  This is an auto-implemented or automatic property
	Public Property Title() As String ' -  Another auto-implemented property
End Class

Friend Class Program
	Shared Sub Main()
		Dim student As New Student()
		student.Name = "Alice" ' Using setter
		Console.WriteLine(student.Name) ' Using getter
	End Sub
End Class
$vbLabelText   $csharpLabel

Student 클래스에서 Name 속성은 auto-implemented로, getter와 setter 역할을 모두 합니다. C# 컴파일러는 내부에서 private string name 필드를 생성하며, Name 속성은 그 필드에 접근을 제공합니다.

속성에서의 고급 접근 제한자

읽기 전용 속성

때로는 외부에서 수정할 수 없고 읽기만 가능한 속성을 제공하고 싶을 때가 있습니다. 이 경우 읽기 전용 속성이 유용합니다. 속성에서 설정자를 생략하여 읽기 전용으로 만들 수 있습니다.

우리의 Person 클래스에 읽기 전용 string Description 속성을 추가하고 싶다고 가정해봅시다:

public class Person
{
    public string Name { get; set; }
    public string Description { get; }

    public Person(string name, string description)
    {
        Name = name;
        Description = description;
    }
}
public class Person
{
    public string Name { get; set; }
    public string Description { get; }

    public Person(string name, string description)
    {
        Name = name;
        Description = description;
    }
}
Public Class Person
	Public Property Name() As String
	Public ReadOnly Property Description() As String

	Public Sub New(ByVal name As String, ByVal description As String)
		Me.Name = name
		Me.Description = description
	End Sub
End Class
$vbLabelText   $csharpLabel

이 예에서는 Description 속성이 Person 클래스의 생성자 내에서만 설정될 수 있습니다. 한 번 설정되면 외부에서 수정할 수 없습니다.

개인 설정자

때로는 클래스 외부에서 속성을 읽는 것은 허용하되, 클래스 내부에서만 설정할 수 있도록 하고 싶을 때가 있습니다. 이는 private set를 사용하여 달성됩니다.

using System;

public class Program
{
    public string Description { get; private set; }

    public Program()
    {
        Description = "This is a program about getters and setters.";
    }
}

class ProgramTest
{
    static void Main()
    {
        Program myProgram = new Program();
        Console.WriteLine(myProgram.Description);  // Allowed
        // myProgram.Description = "New Description";  // Not allowed
    }
}
using System;

public class Program
{
    public string Description { get; private set; }

    public Program()
    {
        Description = "This is a program about getters and setters.";
    }
}

class ProgramTest
{
    static void Main()
    {
        Program myProgram = new Program();
        Console.WriteLine(myProgram.Description);  // Allowed
        // myProgram.Description = "New Description";  // Not allowed
    }
}
Imports System

Public Class Program
	Private privateDescription As String
	Public Property Description() As String
		Get
			Return privateDescription
		End Get
		Private Set(ByVal value As String)
			privateDescription = value
		End Set
	End Property

	Public Sub New()
		Description = "This is a program about getters and setters."
	End Sub
End Class

Friend Class ProgramTest
	Shared Sub Main()
		Dim myProgram As New Program()
		Console.WriteLine(myProgram.Description) ' Allowed
		' myProgram.Description = "New Description";  // Not allowed
	End Sub
End Class
$vbLabelText   $csharpLabel

class Program에서는, Description 속성이 private set를 가지고 있어 클래스 외부에서 변경할 수 없으며 데이터의 무결성을 보장합니다.

상속과 재정의

파생 클래스에서 작업할 때, 게터와 세터 메서드를 재정의하여 동작을 사용자 정의할 수 있습니다. 이는 값을 가져오거나 설정할 때 추가적인 로직을 추가할 수 있게 합니다.

public class Person
{
    public virtual string Name { get; set; }
}

public class Student : Person
{
    private string studentID;

    public override string Name
    {
        get { return base.Name; }
        set
        {
            if (!string.IsNullOrEmpty(value))
                base.Name = value;
        }
    }
}
public class Person
{
    public virtual string Name { get; set; }
}

public class Student : Person
{
    private string studentID;

    public override string Name
    {
        get { return base.Name; }
        set
        {
            if (!string.IsNullOrEmpty(value))
                base.Name = value;
        }
    }
}
Public Class Person
	Public Overridable Property Name() As String
End Class

Public Class Student
	Inherits Person

	Private studentID As String

	Public Overrides Property Name() As String
		Get
			Return MyBase.Name
		End Get
		Set(ByVal value As String)
			If Not String.IsNullOrEmpty(value) Then
				MyBase.Name = value
			End If
		End Set
	End Property
End Class
$vbLabelText   $csharpLabel

이 예에서는 Student 클래스가 Person로부터 상속받고 Name 속성의 setter를 오버라이드합니다. 이름을 설정하기 전에 검증 검사를 추가하여 비어 있거나 null이 아니도록 보장합니다.

Iron Suite를 도입하여 C# 개발을 향상시키기

Iron Suite는 C# 개발 능력을 크게 향상시키는 연구 노력 도구 모음입니다. IronPDF, IronXL, IronOCR 및 IronBarcode를 포함합니다. 이들 각 도구는 고유한 목적을 가지고 있으며, C#의 다양한 측면에 통합될 수 있습니다.

IronPDF - 강력한 PDF 관리 도구

IronPDF에 대해 자세히 알아보세요. 이는 개발자가 C#에서 PDF 문서를 생성, 읽기, 편집할 수 있게 해주는 라이브러리입니다. HTML을 PDF로 변환하거나 게터와 세터를 통해 PDF 메타데이터를 관리하는 등 IronPDF가 지원합니다.

IronPDF는 원래 레이아웃과 스타일을 정확히 보존하여 HTML을 PDF로 변환하는 데 탁월합니다. 보고서, 송장 및 설명서와 같은 웹 기반 콘텐츠에서 PDF를 생성하는 데 완벽합니다. HTML 파일, URL 및 원시 HTML 문자열에 대한 지원으로 IronPDF는 고품질의 PDF 문서를 쉽게 생성합니다.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

IronXL - 쉽고 편리하게 Excel 조작

IronXL Excel 라이브러리는 Excel 파일의 읽기 및 쓰기 과정을 간소화합니다. 이 도구는 Excel 파일의 개인 및 공용 문자열 또는 정수를 조작하는 데 사용될 수 있으며, 이는 C#에서 게터와 세터를 사용하여 클래스를 다루는 방식과 유사합니다.

IronOCR - C# 광학 문자 인식

IronOCR 탐색하기. 이는 이미지를 검색 가능한 텍스트로 변환하는 광학 문자 인식 라이브러리입니다. 응용 프로그램이 스캔된 문서에서 텍스트를 읽는 것이 포함된다면, IronOCR의 강력한 기능을 쉽게 통합할 수 있습니다. 이전 설정 예시의 클래스 Person 또는 클래스 Student에서 기대할 수 있는 것처럼 개인 필드와 공용 문자열 설명을 처리할 수 있습니다.

IronBarcode - 바코드 읽기 및 쓰기 라이브러리

IronBarcode 기능 찾기는 바코드 읽기 및 쓰기가 필요한 응용 프로그램을 위한 것입니다. C# 프로그래밍에서 사용되는 게터와 세터처럼 바코드 데이터에 대한 직접 액세스와 자동 속성을 통한 사용자 정의를 허용합니다.

Iron Suite와 게터와 세터

Iron Suite 패키지는 C# 개발에 매끄럽게 통합되며, 게터와 세터도 포함됩니다. 이들 도구는 모든 C# 프로젝트에 가치를 더합니다.

결론

요약하면:

  1. Getter and Setter: 클래스의 비공개 필드에 접근 및 수정하는 데 도움을 줍니다.
  2. Auto Properties: 자동 구현 된 속성을 사용하여 자동 getter 및 setter를 갖는 우아한 방법입니다.
  3. Access Modifiers: 속성의 접근성을 세밀하게 조정하는 데 도움을 줍니다.

지금까지 C#에서 게터와 세터를 사용하는 방법에 대해 확실히 이해하셨을 것입니다.

Iron Suite의 도구 모음은 C# 개발자에게 놀라운 기능을 제공합니다. IronPDF, IronXL, IronOCR 및 IronBarcode를 포함한 이 제품 각각은 Iron Software 도구의 무료 체험 판과 함께 제공되어, 초기 투자 없이 이 강력한 라이브러리를 프로젝트에 탐색하고 통합할 수 있게 합니다.

준비가 되면, 개인 라이센스는 $799부터 시작합니다. 이들 도구 중 하나 이상의 도구가 귀하의 필요에 맞다면, 개별 라이선스 둘의 가격으로 전체 Iron Suite 패키지를 구매할 기회를 놓치지 마십시오.

자주 묻는 질문

C#에서 Getter와 Setter의 목적은 무엇인가요?

C#의 Getter와 Setter는 클래스의 비공개 속성에 대한 접근을 제어하는 데 사용됩니다. Getter는 속성의 값을 가져오고, Setter는 속성을 수정할 수 있게 합니다. 이 캡슐화는 클래스의 데이터에 대한 안전하고 제어된 접근을 보장합니다.

C#에서 접근 제한자는 속성의 가시성에 어떤 영향을 미치나요?

publicprivate과 같은 접근 제한자는 C#에서 클래스 속성의 가시성과 접근성을 결정합니다. Public 속성은 어디서나 접근 가능하지만, private 속성은 선언된 클래스에만 제한됩니다.

C#의 자동 구현 속성이란 무엇인가요?

자동 구현 속성은 C#에서 속성을 선언하는 간편한 방법을 제공합니다. 별도의 필드, Getter 및 Setter를 명시적으로 작성하지 않고 속성을 정의할 수 있게 합니다. 컴파일러가 자동으로 백업 필드를 생성합니다.

C#에서 읽기 전용 속성을 어떻게 만들 수 있나요?

C#에서는 속성 선언에서 Setter를 생략하여 읽기 전용 속성을 만들 수 있습니다. 이것은 클래스 내에서만, 예를 들어 생성자에서 설정될 수 있으며, 외부에서 수정할 수 없습니다.

C#에서 private setter를 어떻게 사용하나요?

C#의 private Setter는 선언된 클래스 내에서만 속성을 수정할 수 있게 하면서 외부 코드가 속성을 읽을 수 있게 합니다. 이는 데이터를 유지하면서 제어된 접근을 제공하는 데 유용합니다.

C#에서 파생 클래스에서 속성 동작을 재정의할 수 있나요?

예, C#에서는 기본 클래스에서 속성을 virtual로 표시하고 파생 클래스에서 override 키워드를 사용하여 속성 동작을 재정의할 수 있습니다. 이는 Getter와 Setter 동작의 사용자 정의를 허용합니다.

C#에서 HTML을 PDF로 변환하는 방법은 무엇입니까?

IronPDF의 RenderHtmlAsPdf 메서드를 사용하여 HTML 문자열을 PDF로 변환할 수 있습니다. 또한 RenderHtmlFileAsPdf 사용하여 HTML 파일을 PDF로 변환할 수도 있습니다.

PDF 및 바코드 기능성으로 C# 개발을 향상시키는 도구는 무엇인가요?

Iron Suite는 IronPDF와 IronBarcode와 같은 도구를 제공하여 C# 개발을 PDF 관리 및 바코드 읽기/쓰기로 향상시킵니다. 이 도구들은 C# 프로젝트와 원활하게 통합됩니다.

Iron Suite가 C# 개발자에게 유익한 점은 무엇인가요?

Iron Suite는 C# 개발자에게 강력한 도구를 제공하여 C# 프로젝트와 원활하게 통합됩니다. 이러한 도구는 PDF 관리, 엑셀 조작, OCR 기능, 바코드 읽기/쓰기와 같은 고급 기능을 제공합니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해