'#C#'에 해당되는 글 1건

  1. 2019.02.06 C#-10. 클래스의 정적멤버
2019. 2. 6. 10:43


1. 정적 멤버
  - 클래스 : 객체를 만들기 위한 형틀 (마치 붕어빵을 만들기 위한 붕어빵 틀)
  - 객   체 :  클래스가 메모리에 구현되어 생성된 실체
  - 인스턴스  : 메모리에 구현된 클래스의 실체
     >> 하나의 클래스로부터 많은 인스턴스의 생성 가능

참고)  같은 클래스타입의 객체 3개를 생성했을때의 메모리 구조




필드는 특정 객체에 서로 다른 메모리에 생성되지만, 메소드는 공유됩니다.

요악하자면 객체끼리 필드는 따라 가지고 메서드는 공유됩니다.
이것은 모든 객체 지향언어들의 공통점이라고 할수있습니다. 
객체별의 필드, this에 의해 구분되는 메서다를 멤버 또는 비정적 멤버라고 합니다. 
반대개념이 정적개념이며, 키워드 static 으로 지정합니다.


정적메서드 
  - 클래스에 소속, 클래스 차원의 동작 처리
  - 특정 객체에 대한 처리를 하는것이 아님(this 영향 안받음)
  - 클래스 소속의 정적 필드만 엑세스 가능
  - 특정 객체에 소속되지 않으므로 반드시 클래스로부터 호출해야 함.
  Class A
   {
        public static void B()
        {
               Console.WriteLine("스태틱 메소드입니다. 클래스에서 호출하셔함");
         }
   }

   - A.B() 이런식으로 호출해야 합니다. 
   - 정적생성자는 당연히 특성상 클래스가 로드될때 딱한번 자동 호출됩니다.
  
좀 말이 어렵네요. 정적(Static)이라함은 호출순서에 상관없이
즉시 메모리에 옮겨진다는 말입니다. 한마디로 전역함수, 전역변수와 같이, 프로그램이 
실행될때 즉시, 메모리에 올라가서 실행이 되는데, 이는 프로그램이 종료되기까지 계속해서
남아있습니다. 이런식으로 대표적인 함수가 바로 진입점인 Main() 메서드 입니다.
최초 실행될때 어떤 객체도 생성 되지 않으므로 객체에 소속될수가 없지요.


2. 상수 멤버
  ; 한번 초기화 되면 절대 변경할수 없는 멤버입니다.

  - 1. const 상수 : public const int Day = 24; 컴파일할때 값이 딱한번 초기화 됨
     ->  Day란 변수는 이제 24 값만 가질수 있고, 수정이 불가하다.
         객체생성전에 호출되야 하므로 정적메서드가 될수밖에 없습니다.
         Console클래스의 WriteLine도 정적 메서드 입니다. 어디서든 자유롭게 호출 가능합니다.
        - 지역변수에도 적용가능
  
  - 2. readonly 생성자에 의해 한번만 초기화 된다. : readonly public int A; (읽기전용)
         - 클래스 필드에만 적용
         - 실행중에 생성자에서 초기화 

 - 사실 메서드내의 지역상수는 const만으로도 충분합니다.



'프로그래밍 > C#' 카테고리의 다른 글

C# - 보충 : 함수와 return  (0) 2019.02.18
C#-11. 객체지향에서 용어정리  (0) 2019.02.09
C#-9. 생성자  (0) 2019.02.05
C#-8. C# 응용프로그램의 기본구조  (0) 2019.02.03
C#-7. 객체지향과 클래스  (0) 2019.01.31
Posted by 토실토실천재