" /> 글로벌 객체지향 프로그래밍 8주차 - C# 클래스와 접근 제한자 | BlackWerf's Blog
포스트

글로벌 객체지향 프로그래밍 8주차 - C# 클래스와 접근 제한자

클래스

정의

  • 프로그램의 대상이 되는 사물을 class라는 키워드를 이용해 정의한 것
  • 클래스를 가지고 new 키워드를 사용해 객체(인스턴스) 생이 가능


선언방법

접근제한자 class 클래스명{
	//필드, 속성, 메서드, 이벤트의 구현
    접근제한자 자료형 변수명;
    
    접근제한자 자료형 변수명{
        get{}
        set{}
    }
    
    접근제한자 반환형 함수명(매개변수1, ..., 매개변수n){
        ...
    }
    
    접근제한자 event Eventhandler 이벤트 변수;
}


구성요소

  • 클래스로부터 객체를 생성하여 사용함
종류설명
메소드(Method)클래스 내에서 동작하는 코드 블럭
동사 or 동사+명사 방식으로 이름을 정하는 경우가 많음
매개변수의 제한은 없지만, 값은 매개변수의 개수와 동일해야

접근제한자 데이터형 메소드명(매개변수) { return 반환값; }를 이용하여 생성 가능함
메소드명(매개변수)를 이용하여 접근 가능함
속성(Property)클래스 내의 데이터를 외부에서 사용 및 수정 가능하게 설정할 수 있게 하는 멤버
C#과 같은 객체지향 언어에서는, 캡슐화의 목적을 위해 사용됨
속성은 필드 1개에 get과 set이라는 메소드 2개를 필요로 함
필드(Field)클래스 객체의 상태를 유지하는데 사용됨
같은 클래스라도, 객체들은 각각의 필드를 가짐에 따라 서로 다른 상태를 지니게
접근제한자의 설정에 따라, 외부 객체나 상속 객체에서도 노출이 가능함
이벤트(Event)객체 내부의 특정 상태나, 어떤 일이 일어난 것을 외부에 전달하는 목적으로 사용됨
예시: 버튼을 클릭 할 경우, 버튼 이벤트에 가입된 모든 외부 객체에 버튼이 동작 되었음을 통보하는 것


중첩 클래스

정의

  • 하나의 클래스 내부에서 다른 클래스를 정의하는 것
  • 클래스를 그룹화 및 클래스의 사용범위를 제한하는 것이 가능함

사용방법

1
2
3
4
5
class Class1{
    class 중첩클래스명{
        ...
    }
}

예시

class Class1{
	int outerValue;
    class Class2{
        Class1 class = new Class1();
        class.outerValue = 1;
    }
}


partial 클래스

정의

  • 클래스의 내용을 다른 파일로 분할하여 구현한 것
  • 파일은 다르지만, 컴파일 과정에서 하나의 클래스로 파일이 결합됨
  • partial 예약어를 이용하여 클래스의 분할이 가능함

주의점

  • 분할된 파일은 모두 동일 접근 제한자를 사용해야 함
    • 다를 경우 충돌이 발생
  • C#은 다중 상속을 지원하지 않으므로, 부모 클래스가 다를 경우 컴파일 오류가 발생함


객체

정의

  • 작성된 클래스를 new 키워드를 이용하여, Heap 메모리에 생성하는 것

사용 방법

1
클래스명 객체명 = new 클래스명();
예시
1
Circle circle = new Circle();


호출방법

  • Static 예약어가 없을 경우

    • 객체이름.멤버;
    • 예시)
    1
    
    dog.name;
    
  • Static 예약어가 있을 경우

    • 클래스명.멤버;
    • 예시)
    1
    
    Dog.AnimalName
    


This

  • 자신의 객체의 멤버를 접근할 때 사용함
  • 객체 외부에서는 객체의 메소드나 변수에 접근할 때 객체이름.메소드객체이름.변수를 이용하여 접근함
  • 객체 내부에서는 자신의 변수나 메소드에 접근할 때 사용함


생성자

  • 초기화를 위한 메소드로, 인스턴스를 생성할 때 호출됨
  • 클래스명과 동일한 이름을 사용하며, 인수를 어떤 것이든 사용 가능함
  • 반환형이 존재하지 않음


접근제한자

정의

  • 클래스 내부의 멤버의 접근을 제한하는 역활로 사용됨

종류

private

  • 디폴트 접근제한자로, 클래스 내부에서만 사용이 가능함

public

  • 클래스의 외부에서 접근이 가능함

protected

  • 상속받은 하위 클래스에서만 접근이 가능함

internal

  • 어셈블리(NET 기반 어플 배포, 버전 제어, 재사용 등…)의 접근을 허용함
  • 프로젝트 생성 시, internal로 선언한 변수와 형식은 동일 프로젝트 내에서만 접근이 가능함

protected internal

  • 동일 프로젝트 내에서 상속을 받는 자식 클래스에서만 접근이 가능함


사용 원칙

  • 필드는 private로 지정하여 외부에서의 접근을 차단하기
    • 객체 지향 원칙 중 하나인 캡슐화 준수
  • 메소드는 public으로 지정하기
  • 이를 정보 은닉이라고 함
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.