728x90
반응형

03. 객체 생성과 멤버 접근


객체 생성

  • 객체 생성 키워드 : new
  • 객체 해제는 가비지컬럭터에게

 

8-4 예제)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _8_4
{
    class MyClass
    {
        public int val;
        public void PrintA() { Console.WriteLine("Class A"); }
        void PrintB() { Console.WriteLine("Class B"); } // 외부호출 불가능
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass test = new MyClass();
            test.val = 12;
            Console.WriteLine(test.val);
            test.PrintA();
        }
    }
}

 

멤버 접근 및 사용

 

접근 한정자에 따라 접근 제한

객체의 멤버는 ' . '과 함께 표기

object_name.variable

object_name.method

 

8-5 예제)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _8_5
{
    class MyClass
    {
        public int Year, Month, Day;
        public void Print()
        {
            Console.WriteLine("{0}년 {1}월 {2}일", Year, Month, Day);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass MyTest = new MyClass();  //생성
            MyTest.Year = 2018;
            MyTest.Month = 2;
            MyTest.Day = 24;
            MyTest.Print();
        }
    }
}

visual studio의 인텔리센스 기능 활용

 

 

 

04. 생성자와 소멸자


개념

 

생성자 constructor

객체를 생성할 때 자동으로 호출되는 메서드

 

소멸자 destructor

객체가 소멸될 때 호출되는 메서드

 

호출되는 시기?

생성자 -> new              // new를 통해서 생성

소멸자 -> 가비지컬렉터

 

 

생성자의 형식

 

기본 생성자

    - 클래스명과 같은 이름

    - 리턴형 없음, 매개변수 없음

    - 접근 한정자는 public

 

8-6 예제)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _8_6
{
    class MyClass
    {
        string Message;

        public MyClass() // ()매개변수가 없음
        {
            Message = "Hello World"; // 리턴형이 없다. // 초기화 작업
        }

        public void PrintMesssage()
        {
            Console.WriteLine(Message);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass MyTest = new MyClass();
            MyTest.PrintMesssage();
        }
    }
}

 

 

생성자의 형식

 

생성자

    - 매개변수가 있음

    - 리턴형은 없음

    - 접근 한정자는 public

    - 메소드 이름은 클래스 이름과 같아야한다.

 

8-7 예제)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _8_7
{
    class MyClass // 클래스명은 메소드 명과 같다.
    {
        string Message; // 멤버변수

        public MyClass(string InputMessage) // string InputMessage: 매개변수
        {
            Message = InputMessage;
        }

        public void PrintMesssage()
        {
            Console.WriteLine(Message);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass test = new MyClass("Happy!");
            test.PrintMesssage();
        }
    }
}

소멸자

 

소멸자 형식

    - 클래스명과 같음

    - 리턴형 없음

    - 접근 한정자 없음

    - ~로 시작함

class My class
{
	~MyClass()
    {
    }
}

 

소멸자의 특징

  • 소멸자는 클래스에만 있다.
  • 소멸자는 오직 한 개이다.
  • 소멸자는 상속 또는 오버로딩이 될 수 없다.
  • 소멸자는 임의로 호출이 불가능 하다.
  • 소멸자는 접근 한정자나 매개변수가 없다.

8-8 예제)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _8_8
{
    class MyClass
    {
        ~MyClass()
        {
            Console.WriteLine("소멸자 호출");
       }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass Test1 = new MyClass();
        }
    }
}

 

05. 정적 멤버 선언과 사용


정적 멤버 선언과 사용

 

언어에 따른 static 역할 비교

C     : 변수 값 유지

C++ : 객체 안에서 변수 공유

C#   : 객체를 생성하지 않고 멤버 사용

 

ex) Console.WriteLine()  

 

 8-9 예제)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _8_9
{
    class MyClass
    {
        public static int number = 12;
        public static void Print() { Console.WriteLine("Hello World!"); }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass.Print();
            Console.WriteLine(MyClass.number);
            MyClass.number = 200;
            MyClass test = new MyClass(); // new는 객체 생성에만 관련 있다.
            Console.WriteLine(MyClass.number);
        }
    }
}

 

정적 멤버 선언과 사용

 

Main() 안에서 같은 멤버를 호출할 때

8-10 예제)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _8_10
{
    class Program
    {
        static string Message = "Hello World!";
        static void Print() { Console.WriteLine(Message); } // Hellow world

        static void Main(string[] args)
        {
            Print();
        }
    }
}

 

 

 

06. 클래스 참조


클래스 형태

    - 선언한 클래스 -> 참조형 클래스 변수

      MyClass MyReftest;

 

    - new 생성한 클래스 -> 객체

    -MyClass MyTest = new MyClass();

    - MyRefTest = MyTest; //참조

 

8-11 예제)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _8_11
{
    class MyClass
    {
        public int number;
        public MyClass()
        {
            number = 12;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass MyTest = new MyClass();
            MyClass RefClass = MyTest;
            RefClass.number = 7;
            Console.WriteLine(MyTest.number);  // 7 출력
        }
    }
}

 

07. this


C에 없고, C++에 존재한다.

 

  • this는 객체 자신을 참조하는 키워드
  • 사용 형식 : this.member
  • 메소드의 매개변수와 멤버 변수명이 같을 때 : this.member_variable = 매개변수;

      ex) this.number = number;  // this가 의미하는 것은 현재 클래스에 있는 멤버에 속한 변수이다.

 

* this를 사용해서 멤버에 속한 변수인지 아닌지 구분할 수 있다.

 

 

8-12 예제)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _8_12
{
    class MyClass
    {
        public int number;
        public MyClass(int number)
        {
            // this를 통해 number가 여기 클래스에 속한 변수를 나타낸다.
            this.number = number; 
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyClass MyTest = new MyClass(12);
            Console.WriteLine(MyTest.number); // 12 출력
        }
    }
}
728x90
반응형

+ Recent posts