티스토리 뷰

반응형


Base Of Coding 베오코 Youtube 채널을 개설했습니다.

아직은 많이 부족하지만, 블로그에 있는 정보들을 영상으로 담아 보다 더 자세하게 알려드리겠습니다.

점차 발전해나가는 모습 지켜봐주시면 감사하겠습니다.

좋아요와 구독으로 응원해주세요!


https://www.youtube.com/channel/UC7abgcK0OZtkjU9ERbsYKnQ



=========================================================================





안녕하세요. Base Of Coding 입니다.


이번에 알아 볼 내용은, 접근자 및 지역 / 전역 변수에 대해서 알아볼려고 합니다.


접근자가 무엇인지, 지역? 전역변수? 그게 뭐지? 하셨던 분들


제가 쉽게 설명을 해 드리도록 하겠습니다!


그 전에, 예전에 배웠던 내용들에 대한 링크입니다. 밑에 예전에 배웠던 내용들을 클릭해주세요.





1. 접근자란?

- 접근자는 3개로 나뉘어 집니다. private , public , protected로 나뉘어 지는데요. 변수 또는 메서드 ( 함수 ) 에 붙여줄 수가 있습니다.

그리고 아무 접근자를 붙이지 않을 경우에는, private가 기본으로 설정이 되게 됩니다.

그래서 접근자가 뭔데요? 라고 물으신다면, 말 그대로, 이 변수 또는 함수를 접근할 수 있느냐 마느냐를 제어하는 것이라고 보시면 될 것 같습니다.

천천히 한 번 3가지에 대해서 알아보도록 하겠습니다.


2. Private

- private란, 뜻 그대로 비 공개를 뜻합니다. 
자 코드로 한 번 보겠습니다.


1
2
3
4
public class AccessTest
{
    private int accessInt = 0;
}


기본적인 클래스 설정입니다.


accessInt라는 int형 변수가 있네요. 근데 그 앞에 private라는 접근자를 사용했습니다.


그래서 이게 무슨 뜻이냐고!😡😡


private를 쓰게 될 경우, AccessTest라는 클래스에서만 쓸 수 있습니다.


쉽게 설명해보겠습니다.


저에게는 업그레이드 가능한 맥북 프로가 있다고 생각해보겠습니다. ( 사실 최신 맥북 프로는 이제 온보드라.. 업그레이드 자체가 불가능합니다. 예를 들어볼게요. )

그런데, 갑자기 친구가 맥북 프로를 줘봐~ 사용 좀 하고 내가 업그레이드도 해주고 할게ㅎㅎ라고 했는데 친구의 부탁을 거절한 거죠.

왜냐 이건 나만의 것이기 때문에, 그래서 안돼!내가 사용하고 내가 업그레이드 하고 할거야. 라는 뜻과 같습니다.


private 접근자는 즉, 선언한 클래스에서만 사용이 가능하고, 그 곳에서만 값을 읽고 쓸 수가 있는겁니다.


3. Public

- public은, 뜻 그대로 공용을 뜻합니다.
자 코드로 한 번 볼까요?

1
2
3
4
public class AccessTest
{
    public int accessInt = 0;
}


accessInt라는 int형 변수가 public 접근자로 바뀌었습니다.


이 것 또한 쉽게 맥북 프로로 설명을 하자고 한다면,


업그레이드 가능한 맥북 프로를 친구가 맥북 프로 한번만 쓰자~ 그거 사용한 다음에 내가 업그레이드도 해서 줄게!ㅎㅎ라는 부탁을

그래~너가 사용하고, 사용해서 업그레이드를 하든, 아니면 다운그레이드를 하든 너 맘대로 해ㅎㅎ이건 나만의 것이 아니거든~이라는 것과 같은 이치죠.

왜냐 이건 공용이거든요. public으로 선언하면 친구가 사용을 하든, 아니면 친구가 램을 빼서 팔던 SSD를 팔던 상관이 없습니다.


public 접근자는 즉, 선언한 클래스에서도 사용이 가능하고 이 클래스 객체를 가지고 있는 다른 클래스에서도 public으로 선언이 된 변수나 함수를 

사용을 할 수가 있습니다.


4. Protected

- protected는, 뜻 그대로 보호받는 접근자를 뜻하는데요.
코드를 보겠습니다.

1
2
3
4
public class AccessTest
{
    protected int accessInt = 0;
}

이 것 또한 쉽게 맥북 프로로 설명을 하자면,


업그레이드가 가능한 맥북 프로를 친구가 맥북 프로 한 번만 쓰자~ 그거 사용한 다음에 내가 업그레이드도 해서 줄게!ㅎㅎ라는 부탁을

안돼! 이건, 가족끼리만 사용이 가능한 맥북 프로야. 넌 나랑 피가 섞이지 않았으니깐 쓸 수가 없어. 라고 물론! 이러진 않겠지만ㅎㅎㅎ

protected는 이런 상황과 비슷합니다.


왜냐하면, protected는 자기 자신을 포함해서, 상속 관계에서만 사용이 가능하기 때문이죠. 상속이란 것은 부모 클래스와 자식 클래스 관계가

성립이 되게 됩니다. 상속까진 아직 알면 좀 복잡하니깐 그냥 이 정도로만 알아놓으시면 좋을 것 같습니다.



5. 지역 변수와 전역 변수

- 지역변수와 전역 변수는 차이점이 좀 있습니다. 이 차이점에 대해서 한 번 살펴보려고 합니다.

 종류

 저장 장소

선언하는 위치 

허용 범위 

파괴가 되는 시기 

초기값 

 지역 변수

스택 메모리 (Stack) 

함수 내부

함수 내부

함수가 끝나는 시점 

수동으로 설정 

 전역 변수

힙 메모리 (Heap)

함수 외부

클래스 내 전체 

프로그램 종료 

0으로 기본 설정


지역 변수와 전역 변수의 차이점은 이렇게 되어 있습니다.


Stack 메모리, Heap 메모리? 그건 또 뭐야... 저희는 일단 이런 건 신경쓰지 않고 가겠습니다. 프로그래밍의 재미를 느끼는 것이 먼저니깐요.


선언하는 위치는 함수 내부와 클래스 내부로 차이가 있고, 허용 범위 또한 함수 내부와 클래스 내 전체에 차이가 있네요.


파괴가 되는 시점은, 함수가 끝나고 프로그램이 종료되는 시점에 해당 변수가 파괴된다는 점이 또 다르구요.


초기값은 수동으로 설정과 0으로 기본 설정해야된다는 점!


그래서 어떻게 되는건데!!!!!!😤😤😤😤


자자~ 이제부터 이론은 버려버리고, 실전으로 돌입해서 확인해보죠.


코드를 한 번 봐주세요.


1 ) 초기값 설정의 차이점

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Variable : MonoBehaviour 
{
    private int global;        // 전역 변수
 
    void Start()
    {
        int local;            // 지역 변수
        Debug.Log(global);    // Error(X)
        Debug.Log(local);    // Error(O)
    }
}


기본 코드입니다. global이란 변수와 Start 함수안에 local이란 변수가 있네요.

global은 전역, local은 지역 변수라고 주석으로 적혀있습니다.

자 그리고, Start함수 안에 global과 local이란 변수를 각각 출력을 해보려고 하는데..... local 쪽에서 에러가 뜨네요😭

이유는, 초기값 설정 때문입니다.

전역 변수에는 초기값을 설정하지 않아도 알아서 0이란 값이 들어가겠지만, local에는 작성자가 알아서 설정을 해줘야만 하거든요.

그래서, global은 에러가 뜨지 않지만, local에는 에러가 뜨는 이유가 바로 초기값 설정에 차이점에서 나오게 됩니다.


2 ) 선언하는 위치의 차이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Variable : MonoBehaviour 
{
    private int global;        // 전역 변수
    int local;                // 전역 변수
 
    void Start()
    {
        int reallyLocal = 100;        // 이것이 진짜 지역변수
    }
}


global은 전역변수인것을 우리는 알고 있습니다.

local을 global 밑에 선언을 해놨네요. 그렇다고 이것이 지역변수인가? 아니죠. 왜냐하면, 클래스 내부에 있고, 함수 외부에 있기 때문이죠.

reallyLocal에 있는 변수가 진짜 지역변수가 되겠네요. 왜냐하면, 함수 내부에 선언이 되었기 때문이죠. 그리고 100이란 초기값을 설정해줬습니다.

Debug.Log를 이용해서, 저 3개를 모두 출력하면, 0,0,100이 출력이 되겠네요.


3 ) 허용 범위의 차이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class Variable : MonoBehaviour 
{
    private int global = 0;        // 전역 변수
    
    void Start()
    {
        Debug.Log(local);        // 에러
        Debug.Log(global);        // 에러 X
    }
 
    void VariableTest()
    {
        int local = 0;            // 지역 변수
        Debug.Log(local);        // 에러 X
        Debug.Log(global);        // 에러 X
    }
}


허용 범위의 차이를 알기 위해서, VariableTest라는 함수를 하나 생성했고, 그 안에 local이란 지역 변수를 만들어서, 초기값은 0으로 만들어놨습니다.

그리고, global은 아시겠지만, 전역변수입니다. 자 Start함수에서 Debug.Log로 local과 global을 출력하게 만들어놓고, 함수안에서도 출력하게 만들어놨습니다.

하지만, Start함수에는 에러가 나오네요. 에러가 나오는 이유는 local은 VariableTest 함수 내에서 만들어놓은 변수이기 때문에, 그 함수 내에서만 사용이 가능하지 밖에서는 사용이 불가능합니다.

그렇기 때문에, 사용자 정의 함수 내에서는 에러가 없지만, Start 함수 내에서는 에러가 발생하게 되는 것이죠.


이것 또한 쉽게 풀이해주시면 안되요? 라고 말하시기 전에! 풀이를 해보겠습니다.


음.. 이건 이렇게 비교하기가 싫지만, 쉽게 설명하려면 어쩔 수 없기에 예시로 정규직 vs 아르바이트 라고 들어보도록 하겠습니다.... 절대! 절대! 정규직과 아르바이트를 차별하려는 의도는 없습니다.


자 그럼 요즘은 거의 그럴 일 이 없겠지만, 절대 잘리지 않는 정규직과 정해진 시간이 지나면 계약이 끝나는 단기 아르바이트 생이라고 예를 들어보겠습니다.


일단 전역변수는 정규직 지역변수는 아르바이트로 구분할 수가 있습니다. 전역변수는 프로그램이 실행되는 시점에서 힙 메모리에 저장이 되어, 프로그램이 종료될 때 해당 변수가 사라지기 때문이죠.

지역변수는 함수 내부에만 설정이 되어 있어야만 하며, 함수가 종료되면 지역변수도 같이 사라지기 때문에, 지역변수가 선언 된 함수가 호출이 되지 않을 경우에는 지역변수는 직원이 아니게 되는거죠.


그렇기 때문에, 전역 변수는 회사에서 정규직으로 뽑히고 회사가 망하지 않는 이상 잘릴 일 없는 정규직이라고 생각하시면 되고,

지역 변수는 일손이 부족하기 때문에 잠시 단기 아르바이트 형태로 모집한 뒤 시간이 지나면 아르바이트 계약이 끝나는 형태라고 생각하시면 될 것 같습니다.


이렇게 접근자와 지역 변수, 전역 변수에 대해서 알아봤습니다.


다음은, 제네릭 컬렉션에 대해서 알아보도록 하겠습니다.


감사합니다. 지금까지 Base Of Coding이였습니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함