본문 바로가기

전체 글

(20)
[C#] 배열과 리스트 [배열(Array)] 배열은 동일한 유형의 여러 요소를 순차적으로 저장하는 자료 구조이다. 배열에 저장된 각 요소는 배열 내에서 고유한 위치에 있는 인덱스로 식별할 수 있다. 그리고 이 인덱스를 사용하여 배열의 특정 요소에 직접 접근할 수 있다. 배열을 초기화 할 때 정한 크기는 소멸될 때까지 유지된다. 배열의 요소들은 메모리 구조상으로 시작 부분부터 연속적으로 구성되어 있기 때문에 C++의 경우 포인터, 즉 주소 값에 대한 참조에 산술 연산자를 사용하여 직접적으로 배열의 요소에 접근할 수도 있었다. C#에서는 포인터를 사용할 수 없기에 C++을 통해 메모리 구조상의 배열에 대해 간접적으로 이해할 수 있었다. [선형 리스트(List)] 선형 리스트는 시작시 크기가 고정되는 배열과 다르게 런타임 중에 크기..
[C#] 델리게이트와 이벤트 [델리게이트 (대리자)] 델리게이트는 특정 매개 변수들과 반환 형식을 가지고 있는 함수에 대한 참조를 뜻하는 것으로 델리게이트 객체를 통해 함수를 호출할 수 있다. 즉 델리게이트는 같은 형식의 매개 변수들과 같은 형식의 반환 형식을 가진 함수가 있다면 그 함수를 호출할 수 있고 다른 함수의 매개변수에 델리게이트를 넣음으로써 델리게이트와 같은 형식을 가진 함수들을 함수의 매개변수를 통해 호출할 수 있게 된다. 델리게이트는 delegate 반환형 델리게이트이름(매개변수들)의 형식을 갖고 있다. 이런 식으로 3종류의 델리게이트가 정의되어 있을 때, 위와 같이 구현된 함수들은 모두 double의 반환 형식과 double타입의 매개 변수 두 개를 갖고 있으므로 해당 함수들을 받을 수 있는 델리게이트는 Delega..
[C#] 인터페이스 [Interface] C#에서 인터페이스는 클래스나 구조체가 구현해야 하는 동작을 정의하는 추상 형식을 뜻한다. 이 말은 인터페이스를 포함하는 클래스는 반드시 인터페이스에서 정의하는 구성 요소들을 구현해야한다는 것으로 반대로 말하자면 인터페이스를 가지는 클래스는 인터페이스의 구성 요소들이 포함되어 있다는 것을 뜻한다. C++에서는 클래스의 다중 상속을 지원했던 대신 인터페이스라는 개념이 없었지만 C#에서는 클래스의 다중 상속을 막고 대신 함수의 정의만을 갖고 있는 인터페이스의 다중 상속을 지원한다. 여기서 인터페이스와 추상 클래스의 차이점을 보자면 추상 클래스는 순수 가상 함수를 비롯한 일반적인 멤버들을 포함할 수 있지만 인터페이스는 구현을 포함하지 않고 함수의 정의 부분만을 갖는다. 또한 앞서 말했듯이..
[C#] 구조체와 클래스 C# 에서의 구조체와 클래스는 C++ 에서의 구조체, 클래스와 많은 차이를 지닌다. C++에서 구조체는 접근 제어 지시자로 public을 갖고 클래스는 private을 갖는데 이는 목적의 차이가 있기 때문이다. 클래스는 기본적으로 객체를 생성하기 위한 설계도로써 사용되어 정보 은닉을 추구하고 내부 구현 정보를 외부에서 접근할 수 없도록 보호할 필요성, 즉 캡슐화의 필요성이 존재하기 때문에 기본적으로 접근 제어 지정자로 private를 갖는다. 반면 구조체는 단순히 데이터의 집합으로써 사용되었으며 이 데이터에 대해 자유로운 접근이 필요하기 때문에 기본 접근 제어 지정자가 public으로 되어 있다. (C언어의 상위 호환 격인 C++에서 구조체를 도입할 때의 C언어와의 호환성 또한 유지해야했기에 public..
[C++] 다형성, 추상성 3) 다형성 다형성이란 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질로 C++에서는 부모 클래스의 함수를 자식 클래스에서 재정의하여 자식클래스의 서로 다른 반응을 구현할 수 있다. 이를 위해 부모 클래스에서 자식 클래스에 재정의될 수 있는 가상 함수와 부모 클래스의 함수를 같은 함수 이름과 같은 매개 변수로 재정의하는 오버라이딩을 사용할 수 있다. virtual이 붙지 않은 함수를 오버라이드하지 않고 같은 이름의 같은 매개 변수로 부모 클래스와 자식 클래스에서 작성할 수 있지만 자식 클래스에서 부모 클래스로부터 상속 받았을 때 부모 클래스의 함수는 호출되지 않고 숨어버리게 된다. 이렇게 오버라이딩 하는 경우를 하이딩이라고 하며 이름이 같더라도 서로 다른 메모리 주소를 갖는다. 다..
[C++] OOP - 캡슐화, 상속 OOP(Object-Oriented Programming) - 객체 지향 프로그래밍이란 프로그램 설계방법론이자 개념의 일종이다. 프로그램의 기본 단위 구성을 서로 상호작용 하는 객체로 하는 방식인데 이에 대비되는 개념으로 프로그램의 순차적인 처리를 위주로 설계하는 방법론인 절차 지향 프로그래밍이라는 개념이 있다. 이러한 객체 지향의 등장 배경으로는 물리적인 하드웨어의 발전이 시간이 흐름에 따라 빠르게 진행되었으며 그에 비례하여 소프트웨어의 중요성이 빠르게 올라왔다는 점이다. 이에 따라 기존에 사용하던 절차지향의 방식으로는 복잡한 구조에 대한 설계가 힘들어 객체지향의 방식이 대안으로 등장하였다. 이러한 객체 지향이 절차 지향에 비교하여 가질 수 있는 장점과 단점을 살펴 보자면, [장점] 1) 객체 단위로 ..
[C++] 반복문과 연습 C++에서는 반복문과 제어문을 통해 프로그램의 흐름을 제어할 수 있다. [반복문] 특정 작업을 여러번 반복하는, 블록 안의 내용을 여러번 실행하는 문장이다. 1) for 루프(for loop) for 문은 초기화, 조건 검사, 반복 후 작업을 정의하는 증감연산의 세 가지 부분으로 구성된다. 이를 사용하여 특정 횟수의 반복 작업을 수행할 수 있다. for ( 초기화; 조건; 증감연산) { 실행할 코드 } 의 형식을 갖는다. 2) while 루프(while loop) while 문은 조건이 참일 때 계속해서 코드를 반복하는 루프이다. while( 조건 ) { 실행할 코드 } 의 형식을 갖는다. 2-1) do while 루프(do while loop) do-while 루프는 루프를 한 번 실행한 후 조건을 검..
값에 의한 호출 & 주소에 의한 호출 & 참조에 의한 호출 1) 값 형식과 참조 형식 값,주소,참조에 의한 호출에 대해 알아보기에 앞서 값 형식과 참조 형식에 대한 이해가 필요하다. 값/참조 형식의 차이를 이해하기 위해서는 스택과 힙의 이해가 필요한데 윈도우 프로그램은 기본적으로 하나의 스레드를 갖는다. 그리고 개별 스레드마다 전용으로 사용할 수 있는 저장소가 메모리에 할당되는데 이 영역을 스택이라고 한다. 반대로 힙은 프로그램의 필요에 의해, 메모리를 요청할 때 사용할 수 있는 저장소다. 수업에서 배운 바와 같이 힙에 메모리를 할당하는 것은 개발자가 명시적으로 요청한 것이므로 스택의 메모리를 할당하고 해제하는 것과는 다르게 해제하는 과정이 별도로 필요하다. 이러한 개념을 바탕으로 값 형식의 변수는 값 자체가 스택 영역에 할당되고 변수는 그 메모리를 가리키는 것..