C#에서의 접근자
C#은 객체지향으로써 기본적으로 접근제한자 4개가 있다.
- private : 내부에서만 접근할 수 있으며 어떤 클래스에 private이 선언되면 해당 클래스만 접근이 가능하다.
- public : 내부,파생클래스,외부에서도 접근이 가능하다.아무런 제한을 받지 않고 원하는 곳에서 접근 가능하다.
- protected : 내부,상속받은 자식 클래스만 접근이 가능하다.
- internal : 해당 프로젝트에 public 처럼 사용됨.클래스를 생성할 때 접근자를 설정하지 않으면 internal로 설정된다.
정보은닉 원칙
특별한 이유를 제외하고는 필드는 절대적으로 public으로 선언하지 않는다.
접근이 필요할 때는 접근자/설정자 메서드를 만들어서 외부에서 접근하는 경로를 만들어야한다.
캡슐화(Encapsulation)
객체지향에서 중요한 개념이다.캡슐화는 데이터와 해당 데이터를 조작하는 메서드를 하나의 단일 단위로 묶는것이다.
필드를 private으로 선언하여 접근을 통제하고 public으로 선언된 메서드로 클래스 내부의 필드에 접근하는 것이다.
무슨 말인지 모르겠다고?
나도 모른다.
일단 간단한 예시를 보자.
private을 선언함으로써 해당 클래스만 접근 가능하도록 선언
class ExampleClass
{
private int exampleData;//private 접근제한자 선언
public void SetExampleData(int data)
{
exampleData = data;
}
public int GetExampleData()
{
return exampleData;
}
}
프로퍼티(속성)사용(get(),set())
프로퍼티(Property)는 선언한 변수의 값을 외부에서 접근할 수 있도록 하면서 캡슐화를 지원한다.
get/set함수의 접근제한자를 설정해서 외부에서 멤버변수의 접근을 캡슐화한다.
Class Player
{
private int hp; //private이기 때문에 외부에서 접근이 불가능
public int GetHp()//get을 통해 접근
{
return hp;
}
public void (SetHp(int hp)
{
this.hp = hp;
}
using System;
class Person
{
// 프로퍼티를 사용하여 나이 정보에 대한 캡슐화
private int age; // 나이 정보를 저장하는 private 변수
public int Age
{
get { return age; } // 나이 정보를 반환하는 get 메서드
set
{
if (value >= 0) // 나이는 음수가 될 수 없음
age = value; // 나이 정보를 설정하는 set 메서드
else
Console.WriteLine("나이는 음수일 수 없습니다."); //
}
}
// 프로퍼티를 사용하여 이름 정보에 대한 캡슐화
private string name; // 이름 정보를 저장하는 private 변수
public string Name
{
get { return name; } // 이름 정보를 반환하는 getter 메서드
set { name = value; } // 이름 정보를 설정하는 setter 메서드
}
// 생성자
public Person(string name, int age)
{
Name = name; // 생성자를 통해 이름 초기화
Age = age; // 생성자를 통해 나이 초기화
}
// 정보 출력 메서드
public void PrintInfo()
{
Console.WriteLine($"이름: {Name}, 나이: {Age}"); // 이름과 나이 출력
}
}
class Program
{
static void Main(string[] args)
{
// Person 클래스 인스턴스 생성 및 프로퍼티 사용
Person person1 = new Person("홍길동", 30);
person1.PrintInfo(); // 이름: 홍길동, 나이: 30
// 나이를 변경할 때 유효성 검사 수행
person1.Age = -10; // "나이는 음수일 수 없습니다." 출력
// 프로퍼티를 통해 이름 변경
person1.Name = "Wang chun";
person1.PrintInfo(); // 이름: Wang chun, 나이: 30
}
}
'C#은 처음이라' 카테고리의 다른 글
C# 문자열(string) (0) | 2024.03.07 |
---|---|
C# 가상함수 (0) | 2024.03.06 |
C# 추상화(Abstract) (0) | 2024.03.06 |
C# 배열 활용 (0) | 2024.03.06 |
C# 데이터 형식 (1) | 2024.03.04 |