728x90
반응형

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 멤버에 접근할 수 있다.

      외부에서만 접근할 수 없다.

728x90
반응형

+ Recent posts