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
반응형
'C# > C#으로 살아남기_나우캠퍼스_이태성강사' 카테고리의 다른 글
[C# 언어 9강] 인덱서(Indexer) (0) | 2021.12.29 |
---|---|
[C# 언어 9강] 속성(Property) (0) | 2021.12.29 |
[C# 언어 8강] 클래스(1/2) 개요, 클래스 형식과 접근 한정자 (0) | 2021.03.09 |
[C# 언어 6강] 파일입출력(3/3) serialize (0) | 2021.03.08 |
[C# 언어 6강] 파일입출력(2/3) 파일스트림2 (0) | 2021.03.03 |