내일배움캠프/IL

[내배캠][Unity_6기][IL] C# 추가 학습

binary는 호남선 2024. 8. 31. 10:00

- 다음 내용은 Unity 퀘스트 모음집 \ C# 사전 문법 기초 \ 기타 페이지들을 학습하고 작성되었습니다.

스코프(Scope)

- 영역, {}(중괄호) 기준으로 정해짐- 중괄호는 반드시 한쌍을 이룸

(쌍을 이루지 않으면 에러 발생, 

괄호가 어디에서 누락됐는지 모르겠으면 전체선택 후 Ctrl+K+F로 자동정렬 후 빠진 부분 찾기

, 좌측의 모든 점선이 중괄호로 이어져야함)

클래스 내부

- 가능한 활동 : 변수 만들기, 변수 선언과 동시에 초기화, 함수 만들기, 접근 제한자 설정

- 불가능한 활동 : 변수 선언 후 초기화, 로직 작성

public class MyClass    // 클래스의 접근 제한자 설정
{
    private int x; // 변수 생성
    private int y = 10; // 변수 선언과 동시에 초기화
    x = 1;  // ERROR : 변수 선언 후 초기화 불가능

    Console.WriteLine("Hello"); // ERROR : 로직 작성 불가능

    public void PrintHello()    // 함수 작성 가능
    {
        Console.WriteLine("Hello");
    }
}

함수 내부

- 가능한 활동 : 변수 사용, 로직 작성

- 가능은 하지만 지양하는 활동 : 다른 함수 정의 (코드 구조가 복잡해지고 호출 스택에 의한 오버헤드 증가)

public class MyClass 
{
    public void PrintHello()
    {
        bool isValid = true;    // 변수 사용 가능

        if (isValid)    // 로직 작성 가능
            Console.WriteLine("Hello");

        // 함수 내 함수 정의 가능
        // 문법적으로는 가능하나 지양하기
        void PrintWorld() 
        {
            Console.WriteLine("World");
        }
    }
}

변수의 생명 주기

{} 내부의 변수는 {}를 벗어나면 사라짐

{
    int x = 10;
}
x = 20;
// ERROR : x가 서로 다른 영역에 있으므로 인식 못함

클래스 내부의 변수

- 클래스 내부에 선언된 변수는 클래스 존재하는 동안 유지되며 접근 가능

class MyClass
{
    int x = 10;

    void Start()
    {
        AddNum();
        SubNum();
    }
    void AddNum()
    {
        x++;
        Console.WriteLine(x);   // 11
    }
    void SubNum()
    {
        x--;
        Console.WriteLine(x);   // 10
    }
}

접근 제한자 (Access Modifier)

- 변수, 함수, 클래스를 외부에서 접근할 수 있는 범위를 제한

접근 제한자 접근 범위
public 외부에서 접근 가능
private 외부에서 접근 불가, 기본 설정
protected 상속 관계에서 접근 가능
internal 동일한 프로젝트 내에서 접근 가능

- 변수, 함수, 클래스 정의의 가장 앞에 붙임

public

- 클래스 내부의 public 변수와 함수는 외부에서 접근 가능

class MyClass1
{
    public int x = 10;

    public void TestFunc()
    {
        Console.WriteLine(x);
    }
}
class MyClass2
{
    MyClass1 mc1;

    void Start()
    {
        mc1.x = 20; // 외부에서 public 변수 접근 가능
        mc1.TestFunc();  // 외부에서 public 함수 접근 가능
    }
}

private

- 클래스 내부의 private 변수와 함수는 외부에서 접근 불가

class MyClass1
{
    private int x = 10;
    int y = 20; // private으로 기본 설정
    private void TestFunc()
    {
        Console.WriteLine(x);
    }
}
class MyClass2
{
    MyClass1 mc1;

    void Start()
    {
        mc1.x = 20; // ERR : 외부에서 private 변수 접근 불가
        mc1.y = 30;
        mc1.TestFunc();  // ERR : 외부에서 private 함수 접근 불가
    }
}