01. 클래스 개요
클래스란?
변수와 메서드를 그룹화한 것
주요 개념
- 그룹화를 위해 class 키워드와 형식 사용
- new 연산자로 생성하여 사용
- new를 사용하지 않으면 같은 클래스 참조할 수 있는 변수가 된다. (클래스 참조 변수)
- 클래스를 new를 통해 생성하면 객체가 된다.
인스턴스와 객체의 관계
인스턴스는 본질
객체는 실물인 형상
A test1 = new A();
A test2 = new A();
object instance
공통점 : " 같은 A 인스턴스를 가지는 test1과 test2 객체 "
02. 클래스 형식과 접근 한정자
클래스 형식
클래스 형식과 구조체 형식은 유사
struct struct_name
{
// c에서는 변수만, c++에서는 변수와 메서드 사용
}
class class_name
{
// 변수, 메서드 사용가능
}
xxx.멤버변수, xxx.멤버 메서드
구조체 선언은 값형
클래스 선언은 참조형 -> new 연산자를 사용해서 생성 할 경우에만 객체가 된다. (이외는 같은 클래스를 참조하는 변수)
클래스 형식
class class_name
{
variable 선언; // member
method 선언; // member
}
class Date
{
int Year, Month, Day;
void Print()
{
Console.WriteLine("{0} {1} {2}", Year, Month, Day);
}
}
접근 한정자(access modifier)
클래스 멤버에 대한 접근 권한 설정
접근한정자 (private, protected, public, internal, protected internal)
클래스 자체에 적용하는 접근 한정자
public -> 명시적
internal -> 암시적
형식
[접근 한정자] class class_name // 접근 한정자: public
{
[접근 한정자] variable 선언;
[접근 한정자] method 선언;
}
클래스 안에서 접근 한정자의 역할
public
- 클래스 내외부에서 모두 접근 가능
- 상속관계에서도 위와 동일하게 접근 가능
private
- 클래스 또는 구조체 안에서만 멤버에 접근
- 클래스 외부에서 사용 안됨
protected
- 클래스 안에서는 private와 같은 역할
- 하위 클래스 안에서는 상위 protected 멤버에 접근 가능(private와 동일한 역할)
8-2 예제)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _8_2
{
class Date
{
int Day;
public int Year, Month; // public은 year, Month 전체에 접근 한정자 지정해준다.
/* [8-3]
public int Year;
protected int Month; // 내부용으로만 사용가능
int Day;
*/
void Print() // Date의 메소드
{
Console.WriteLine("{0} {1} {2}", Year, Month, Day);
}
}
class Program
{
static void Main(string[] args)
{
Date Test = new Date();
// Test. // Year와 Month는 사용할 수 있다. 그러나 Day는 사용 X
}
}
}
어셈블리 안에서 접근 한정자의 역할
internal
- 같은 어셈블리(exe, dll) 안에 있을 때만 내외부에서 멤버에 접근 가능
- 클래스 서두에 접근 한정자 생략은 internal 생략한 것
class Test
{
}
protected internal
- 같은 어셈블리(exe, dll) 안에서는 internal과 동일
- 서로 다른 어셈블리 안에서 상속관계일 떄 하위 클래스는 상위 클래스의 protected internal 멤버에 접근할 수 있다.
외부에서만 접근할 수 없다.
'C# > C#으로 살아남기_나우캠퍼스_이태성강사' 카테고리의 다른 글
[C# 언어 9강] 속성(Property) (0) | 2021.12.29 |
---|---|
[C# 언어 8강] 클래스(2/2) 객체 생성 및 사용, 클래스 참조와 this (0) | 2021.03.09 |
[C# 언어 6강] 파일입출력(3/3) serialize (0) | 2021.03.08 |
[C# 언어 6강] 파일입출력(2/3) 파일스트림2 (0) | 2021.03.03 |
[C# 언어 6강] 파일입출력(1/3) 파일스트림1 (0) | 2021.03.02 |