본문 바로가기
[ Program ]/c#스터디

22.배열1

by 관이119 2021. 9. 26.





반복문은 배열과 대부분 같이 쓰인다.

배열이란 동일한 형태의 값을 일렬로 늘어놓은것이다.

 

우리는 마트에서 사과 , 바나나 , 멜론 , 포도 등이 같이 있으면 과일코너 라고 인지할 수 있다.

만약 다른사람과 전화해서 내위치를 이야기할때 과일코너에 있다고 말하지 사과 , 바나나 , 멜론 , 포도 등등 여러가지가 있는 곳에 있다 라고 이야기하지는 않을것이다.

 

배열은 이처럼 내가 사용할 여러 데이터들을 하나의 명칭으로 표현하고 말할수 있게 하기위한 도구이다.

가장 기본형식은 아래와 같다.

형식[] 배열명 = { "값1","값2"... };

[] 는 [ ] 두개 붙여쓴문자다.

 

예제로 확인해보면 아래형태이다.

string[] myperson = { "나" , "상상의동물여친" , "효도하자부모님" };

myperson 이란값으로 뒤에있는 내용들을 호출할수 있다.

배열은 첫번째 값이 0 부터 시작한다.

즉 위경우 0 - 나 , 1 - 여친 , 2 - 부모님 이 된다.

 

값을 가져올때는 배열명 [ 순서 ] 로 써주면 된다.

아래 예제를 보자.

MessageBox.Show(myperson[0]);

 

위와 같이 실행하면 "나" 라고 팝업이 뜰것이다.

myperson[1] 과 myperson[2] 는 어떤 내용이 표시될지 각각 연습해보자.

 

 

배열은 위와같은형태 말고도 다른형태들로도 만들수 있다.

<예제1>

string[] aa;
aa = new string[10];

<예제2>

string[] aa = null;
aa = new string[10];

<예제3>

string[] aa = new string[10];

위 3개의 예제는 모두같은의미이다.

 

<예제4>

string[] a = new string[] { "aaaa","bbb" };

 

하나씩 살펴보자.

일단 예제1같은경우는 이전에 변수할때 하지않은 형태이다.

형식 변수명; 

위와같은 형태로 변수에 아무값도 넣지않고 변수만 지정할 수도 있다.

 

그림1

그림1에서 보는거처럼 값을 대입하지않고 변수를 지정할 수 는 있지만 사용하려고하면 그림2와 같이 에러가 발생한다.

 

그림2

말 그대로 변수에 아무값이 없다는 에러가 발생한다.

밑에서

a = "테스트";

b = 0;

과 같이 값을 넣어준후 출력하면 에러가 사라질것이다.

위에서 본것처럼 변수든 배열이든 아무것도 없는 상태로 만들 수 있지만 해당 변수에 꼭 값을 넣어주고 사용해야한다.

 

다시 배열로 돌아가서 예제1을 보면 string 형식을 가지는 aa 라는 배열을 만들고 아무값도 넣지않은 상태이다.

그리고 아래줄에 aa = new string[10]; 라고 써놨는데 이내용은 10개의 데이터를 넣을수 있는 배열로 만들겠다는 의미이다.

 

다음 예제 2를 보면 null 이라는 값을 처음에 대입해놨다. 

null 도 사실 아무것도 넣지않은 것과 똑같은 상태이다.

즉 예제1과 완전히 동일한 상태이다.

null 이 아무것도 없는것과 같은 상태라는 것만 알아두고 넘어가자.

 

예제3을 보면 이전에 변수에서 바로 값을 넣어주는것처럼 배열을 만들면서 바로 길이까지 함께 지정해줬다.

배열은 보통 처음에 값이 없는상태에서 프로그램이 진행되면서 여러값들이 들어가고 배열명으로 통합적으로 그값들을 호출하는 형태로 사용하기때문에 실제로 사용하다보면 예제3과 같은 형태로 많이 사용하게 된다.

 

예제1,2,3 에서 보면 new 라는 것을 사용했는데 배열은 객체로 만들어 사용해야 하기때문에 써준것이다.

그림1

 

그림1은 객체에 대한 정의를 설명한 내용이다.

객체는 기준이 되는 어떤것을 복사한 것이다.

기준이 되는 동그라미를 복사해서 제일위에 있는 객체는 자동차바퀴로 쓸수도 있을것이고 제일아래에 있는 객체는 접시로 사용할 수도 있을것이다.

물론 자동차 바퀴도 따로 만들고 접시도 따로 만들어도 된다.

그런데 기준이 되는 동그라미를 만들어두고 기본적인 형태는 기준이 되는 동그라미에서 조금씩 변경하는것이 더빠르고 효율적일 것이다.

메모리적인 관점에서 생각하면 이해가 더 쉬운데 "기준이 되는것" 을 만드는 기준은 heap 메모리에 있는것이다.

그림2

 

그림2를 보면 이전에 잠깐 설명한 heap 과 stack 영역이 나온다.

그림2 전체는 메모리 공간을 나타내는데 하나의 값으로 메모리에 적어놓고 사용해야하는것은 stack 영역에 아래에서부터 쓰여지고 하나의 값이 아닌 여러가지 데이터와 값을 가지는 큰덩어리는 heap 영역에 위에서부터 쓰여진다고 생각하면 된다.

그런데 사용할때는 아래 C = NEW C_AREA 라고 해둔것처럼 new 키워드를 사용해서 따로 객체를 생성해서 사용해야 한다.

new 로 객체를 생성해주면 그객체는 위쪽 heap에 있는 기준이 되는것을 가리키게 된다.

단 , 그림1에서 설명한것처럼 기준이 되는것의 형체는 동일하되 다른 새로운것이 되버린다.

메모리 관점에서 보면 C_AREA 자체를 여러개 만드는것보다 C_AREA 형태와 동일하지만 다른새로운 객체가 되는것이 메모리 낭비가 훨씬 적어질것이다.

결국 new 라는 키워드를 사용해서 객체(기준이 되는것과 같은형태를 가진 복사본) 를 생성하게 되는것이다.

 

이해할수 있는 설명이 되었는지 모르겠지만 만약이해가 힘들다면 값을 단일지정할수 있는것은 stack 에 저장되고 바로 값을 입력하면되고 이것저것 많이 들어있는것은 heap에 저장되고 사용할때는 new 로 새로 만들어서 사용해야 한다 라고 생각해도 되겠다.

 

다시 위의 예제3으로 돌아가보면

string[] aa = new string[10];

위구문은 string 형태의 배열을 생성하는데 배열의 이름은 aa이고 , 새로운객체를 생성해서 10개의 데이터를 넣을수 있게 지정하겠다는 의미가 된다.

 

예제4의 경우 new 에서 배열개수를 써주지않고 값을 초기화 했는데 저런형태도 가능하다는것을 알아두자.

 

 

***숙제 : 배열을 생성해서 반복문으로 출력해보자.

'[ Program ] > c#스터디' 카테고리의 다른 글

24.반복문2 - while , foreach  (0) 2021.10.09
23.배열2  (0) 2021.10.09
21.반복문1 - for  (0) 2021.09.26
20.조건문(분기문) 실습1  (0) 2021.09.20
19.조건문(분기문) , bool형식 , 논리연산자3 - switch  (0) 2021.09.20

댓글