정적(Static) 멤버

 

 

 

 

Ø정적(static) 필드
l같은 클래스의 각 인스턴스가 공유해야 하는 변수가 있을 경우, static으로 설정한다.

  class People{

      string static classNameInKorean=“사람”

  }

l정적 멤버들은 객체를 인스턴스화 하지 않고 사용할 수 있다.

  Console.WriteLine(People.classNameInKorean);

 

 

 

 

 

실습 2

 

 

 

 

 

ØAccessTest라는 클래스 이름을 갖는 프로그램을 작성합니다. AccessTest 클래스는 다음과 같은 조건을 만족시켜야 합니다.
lSetRadius : 원의 반지름을 setting합니다.
lGetArea : 반지름을 이용하여 원의 면적을 구합니다.
lDisplay : 결과를 출력하는 기능을 수행합니다.
l반지름과 면적을 public, private으로 바꿔가면서 작동여부를 test해 봅니다.

 

 

 

 

실습 1

 

 

 

 

Ø클래스의 개념 이해를 위해 작은 클래스 하나를 정의해봅니다.(Rectangle 클래스)
l멤버 변수 : private double x1, y1, x2, y2
l멤버 메소드(public)
§GetArea()
§SetPoint1(double v1, double v2)
§SetPoint2(double v1, double v2)

 

Ø위 두 클래스를 정의한 후 사각형의 두 점을 이용하여 사각형의 면적을 구하는 프로그램을 작성합니다.

 

 

 

 

 

접근 제어 – Example(해설)

 

 

 

 

Øx,y,zprivate이므로 클래스 Rectangle에서만 접근할 수 있음에도 불구하고 클래스 MainClass에서 접근했기 때문에 오류이다.
Ø앞 예제에서는 x,y,z를 직접 엑세스 하는 것을 피하고 setValue를 이용하도록 하고 있다.
Ø변수에 대한 읽기나 쓰기만을 제공하고 싶은 경우에 이런 방법을 사용하게 된다.

 

 

 

 

 

 

접근 제어 – Example(3)

 

 

 

  c2.SetValue(4.0, 5.0, 6.0); // OK

  k2 = c2.GetArea(); // OK

  Console.WriteLine(k2); // 결과 : 120.0

  Console.ReadLine();  // 잠시 멈춤을 위해 사용

  }

}

}

 

 

 

접근 제어 – Example(2)

 

 

 

 

 

class MainClass

{

  public static void Main(string[] args)

  {

  Rectangle c1, c2;

  double k1, k2;

 

  c1 = new Rectangle();

  c2 = new Rectangle();

     //  c1.x = 3.0; // ERROR

//  c1.y = 4.0; // ERROR

//  c1.z = 5.0; // ERROR

//  k1 = c1.x * c1.y * c1.z; // ERROR

//  Console.WriteLine(k1); // 결과를 얻을 수 없음

 

 

접근 제어 – Example(1)

 

 

 

 

 

using System;

namespace Application2002

{

 

class Rectangle

{

  private double x;

  private double y, z;

  public double GetArea(){

  return x * y * z;

  }

  public void SetValue(double v1, double v2, double v3){

  x = v1;

  y = v2;

  z = v3;

  }

}

 

 

 

접근 제어

 

 

 

 

Ø접근 제어를 사용함으로써 얻을 수 있는 잇점

 

l프로그램의 논리적 오류 검증을 돕는다.

 

l수정하기가 용이하다

 

l소스 파일의 다른 부분에 영향을 주지 않고, 특정 부분을 쉽게 수정할 수 있다.

 

l내부 정보 은닉을 위해 필요하다.

         §어떤 queue를 사용하는 경우, queue에는 enqueue를 통해서만 아이템을 추가 할 수 있게 하고 싶다. 이때 들어있는 “아이템의 개수” 멤버 변수를 public으로 만들어 둔다면, 실제 들어있는 아이템의 개수와 “아이템의 개수” 멤버 변수가 다를 수도 있는 것이다.

 

 

 

 

 

 

 

 

+ Recent posts