본문 바로가기

C#

C#- 객체(OOP), CLASS, 구조체, 배열 어떻게 사용할까

반응형

-객체-

이번 강좌에서는 강력한 기능을 제공하는 클래스에 대해서 배우기 전에, 객체 지향 프로그래밍(Object Oriented Programming, OOP)에 대해 알고 넘어가야 하기에 객체 지향 프로그래밍이 도대체 무엇인지에 대해서 설명을 해드리도록 하겠습니다. 우리가 알고있듯 C#은 객체 지향 언어입니다. C#에서의 객체(Object)는 핵심 중에 핵심이라 말할 수 있죠.

 

오로지 객체만을 다루는 책이 있을정도로 객체를 완벽히 이해하기에는 많은 어려움이 있습니다.

 

우리 주위에서 객체는 쉽게 찾아볼 수 있습니다. 눈에 보이는 모든 것이 객체가 될 수 있습니다. 지금 앞에 보이는 모니터, 마우스, 키보드, 프린터, 달력, 가방, 자동차 등과 같이 개념상으로 존재하는 것은 모두가 객체가 됩니다. 심지어 생각, 날씨 정보 등도 객체가 될 수 있습니다.

 

 

 

객체들은 각각 상태(state)와 행동(behavior)을 지니고 있습니다. 실세계의 모든 것은 상태와 행동으로 표현할 수 있죠. 전화기를 예로 들자면, 전화기의 색은 상태가 되고 전화기로 전화를 걸거나, 전화를 끊거나 하는 등의 동작은 행동이 됩니다. 또, 자동차를 예로 들자면 자동차의 속도 등이 상태가 될 수 있고, 속도를 올리거나, 속도를 내리거나, 브레이크를 밟거나 하는 등의 동작은 행동이 됩니다.

 

C# 프로그래밍에선 상태는 데이터(변수)로, 행동은 메소드로 표현할 수 있습니다. 즉, 객체는 데이터와 메소드로 이루어진다는 말과 같습니다. 쉽게 이해하기 위하여 흔히 드는 예를 하나 들겠습니다. 붕어빵이라는 객체를 만들기 위해서는 붕어빵을 찍어낼 틀이 필요합니다. 여기서 붕어빵을 찍어낼 틀은 클래스라고 할 수 있습니다. 붕어빵 틀(클래스)은 하나만 있어도 붕어빵(객체)를 여러 개 찍어낼 수 있죠. 이해되시죠?

상태를 필드(field)로 나타내고, 행동을 메소드(method)로




class

 

 

 

클래스와 구조체는 데이터 타입생성기 라는 점에서는 유사하지만,

 

 

 구조체는 값타입이라는것과 클래스는 참조타입이라는 점에서 차이점이 있다.

 

 

 체를 사용하는이유는 클래스 사용시에 참조로인한 시간적 비용적 낭비를 없애기 위해 사용한다. 구조체는 값타입이기에 직접적으로 메모리에 접근하므로 낭비를 막을수 있다.

 

 

 c#에서는 크기가 작고 단순한 함수들을 포함하는 선, 컬러 들과 같은 그래픽요소등을 구조체로 정의해두었다.

 

 또한 구조체와 클래스의 다른점은 구조체는 상속자체가 불가능하다.



출처: https://vaert.tistory.com/111 [Vaert Street]

 

 

 

학생 정보를 프로그램으로 옮긴다고 생각해보자

이름:string nameㅁ;

생년:int birthㅁ;

학번:int numㅁ;

이 데이터를 한번에 묵어 보다 이래서 필요한게 struct

 

struct 구조체

 

 

그냥 STRUCT을 왠만하면 쓰도록 하자 

 

배열

배열( ARRAY)이란 무엇이고 왜 필요한 것일까? 프로그래밍하다 보면 같은 데이터 유형의 변수명을 여러개 사용해야할 때가 종종 발생한다. 예를들어, 5개의 제품이 있고 각제품의 가격을 다룬다고 해보자 배열을 모르는 개발자라면 다음과 같이 코드를 작성할 것이다.

int product1 = 5000;

int product2 = 5500;

int product3 = 6000;

int product4 = 10000;

int product5 = 60000;

개발자가 관리햐야할 int형 변수명만 해도 5개나 된다. 설령 지금은 괘찮다고 해도 나중에 제품의 수가 100개 1000개 늘어 난다고 하면 그에 따라 코드의 양도 급격하게 증가할 수 있다. 이럴 떄 개발자를 편리하게 만들어 주는 것이 배열이다. 위와 같은 유형의 문제가 발생했을 때 배열로 선언하면 다음과 같이 간단하게 문제가 해결된다.

int[] products = new int[5]

string[] names = new string[1000];

여기서 새롭게 "new"라는 예약어와 함께 배열을 정의하기 위한  대괄호 문장부호를 볼수 있다. c#에서 new 키워드는 참조 형식과 함께 사용되는 경우 그에 필요한 힙(Heap)에 할당하는 역할을 한다. 그리고 변수를 선언할 때 대괄호를 사용하면 해당 변수가 배열임을 의미한다.

int product =500;

---

4byte    - 4바이트의 메모리 공간을 할당하고 그메모리를 조작하는 식별자로 product이라는 변수 명을 부여하는 것과 같다.

int [ ] products = new int[10]: 0~9까지 배열

배열의 값을 별도로 힙에 할당하고있다. 

 

연속적으로 할당된 요소에 대해 개별적으로 접근하려면 어떻게 해야할까? 이떄도 역시 대괄호를 사용할 수 있는데 한가지 주의할 점은 시작 번호가 1이 아닌 0이라는 점이다.

 

배열의 선언 

int[] arScore;   // 1차원 정수 배열

배열의 차수 는[]괄호 안의 콤마수 +1이다.

int imoney1; 

 

int [] products = new int[10]  인덱스 방식 

product 라는 아파트 단지 안에 10번째 

product[0] = 100; 0번째에 100을 넣어라 

 

 

 

 

 

 

for문에 중단점을 실행후 (f9) 한단계식 진행(f11)로 코드 점건 조사식1 파트에서 진행 과정 확인 

디버그 모드를 통한 단계 단계 분석 조사식 파트에서 숫자를 확인하면서 코드 에러 확인 

 

 

 

 

 

배열 할당 

atsung = new int[2,3]   [행,열]

 

3. 다차원 배열(Multidimensional array)

다차원 배열이란, 말 그대로 여러 개의 차원을 다루는 배열입니다. 우리가 지금까지 만나봤던 배열들은, 모두 가로로만 이루어진 1차원 배열이었습니다. 이번엔 주로 쓰이는 2차원 배열에 대해 알아보도록 하겠는데, 2차원 배열은 1차원 배열과는 달리 가로와 세로를 가지는 평면 구조의 사각형으로 이루어져 있습니다. 

 

만약에 student란 2차원 배열이 있고 열이 6, 행이 3인 배열이 있다고 합시다. 그렇게 되면 위와 같은 구조를 형성합니다. 1차원 배열의 요소에 접근하는 방법과 2차원 배열의 요소에 접근하는 방법은 비슷합니다. 3열 2행에 있는 값을 가져오고 싶다면, student[2][1]라고 하시면 되겠죠. 아래는 2차원 배열을 선언하는 형식입니다.

자료형[,] 배열명 = new 자료형[행, 열];

이제 2차원 배열을 직접 다루어 컴파일을 해보도록 하겠습니다. 아래 예제는 2차원 배열을 다루는 예제입니다.



출처: https://blog.hexabrain.net/136 [끝나지 않는 프로그래밍 일기] 

-다차원 배열-

 

내가한 코드 문제가 있다.

 

강사님이 하신 코드

강사님이 하신 코드는 보면 이해가 되는데 다시 해보라하면 못하겠다. 내머리에서 나오고 안 나오고가 이렇게 다르다.

 

 

내가하다가 포기한거

아직 던져 놓고 스스로 하라고 하면 너무 어렵다 덜컥 겁부터 나고 어디 부터 손대야하는 지 모르겠다. 

알고 있지만 스스로하는 기능이 두꺼비집 내려가듯이 내려간 느낌이다.

3년동안 앉아서 정해진 사무직만 한 삶의 폐해라고나 할까 답정너다.

 

 

강사님이 작성하신 소스

 

 

강사님이 작성하신 소스의 결과값

그러면 그냥 외우자 내가 다시 해보자 멍청해도 하다보면 늘겠지 

일단 빨간 상자 안에 들어가 있는게 핵심 Array.Revers 메쏘드이다. 배열 선언하고 해당 리벌스 함수 입력후 

포이치로 출력해주면 된다. 역시나 포문을 쓰는거 보다 깔끔하고 빠르다. 포이치는 변수하나를 () 안에서 바로 생성하고 

해당 변수로 출력만 해주면 된다. 

 

그래도 다시 해보니 쫌 이해가 되네 휴,,,,, 하루하루 진도 따라가기 힘들다.

반응형