프로그래밍 언어 96

STL - 제네릭 프로그래밍과 템플릿

제네릭 프로그래밍 방식 제네릭 프로그래밍 방식에 따라 설계한 소프트웨어 라이브러리는 기존의 다른 소프트웨어 라이브러리와 비교했을 때 몇 가지 뚜렷한 차이점을 발견할 수 있다. 기존의 컴포넌트 설계 방식으로 만들어진 컴포넌트의 조합보다는, 제네릭 프로그래밍 방식에 따라 치밀한 구성과 상호 교체 가능성을 지니도록 만들어진 컴포넌트들의 조합이 다방면에서 더 유용하다. 데이터베이스나 사용자 인터페이스와 같이 다소 특화된 분야에서 사용할 컴포넌트를 추가로 개발하고자 할 때, 제네릭 프로그래밍은 컴포넌트 개발을 위한 근간으로 사용하기에 적당한 설계 방식을 제공한다. 컴파일-타임 매커니즘을 사용하고 ( = 가상 함수는 런-타임 메커니즘이며, STL에서는 가상 함수를 사용하지 않는다), 알고리즘 관련 이슈들에 관해 충..

정적 멤버와 상수 멤버

정적 멤버 변수 C++에서 정적 멤버란 클래스에 속하지만, 객체 별로 할당되지 않고 클래스의 모든 객체가 공유하는 멤버를 의미한다. 멤버 변수가 정적(static)으로 선언된다면, 해당 클래스의 모든 객체에 대해 하나의 데이터만 유지 관리된다. 정적 멤버 변수는 클래스 영역에서 선언되지만, 정의는 파일 영역에서 수행된다. 이러한 정적 멤버 변수는 외부 연결 (external linkage)을 가지므로, 여러 파일에서 접근할 수 있다. 정적 멤버 변수에도 클래스 멤버의 접근 제한 규칙이 적용되므로, 클래스의 멤버 함수나 프렌드만이 접근할 수 있다. 하지만 정적 멤버 변수를 외부에서도 접근할 수 있게 하고 싶으면, 정적 멤버 변수를 public 영역에 선언하면 된다. 다음 예제는 모든 Person 객체가 같..

프로퍼티, 델리게이트, 이벤트 간단 정리

프로퍼티 프로퍼티(property)란 클래스의 private 필드를 형식적으로 다루는 일종의 메소드로 간주할 수 있다. 즉, 클래스의 private 필드는 정보 은닉(information hiding)을 위해 다른 클래스에서는 임의로 접근이 허용되지 않지만 대응되는 여러 프로퍼티를 통하여 다른 클래스에서 형식적으로 접근할 수 있는 방법이 제공되는 것이다. 일반적으로 하나의 프로퍼티는 값을 지정하는 셋-접근자(set-accessor)와 값을 참조하는 겟-접근자(get-accessor)로 구성된다. 프로퍼티는 마치 필드처럼 참조할 수 있으며 배정문의 왼쪽에서 사용하면 셋 - 접근자가 호출되고 배정문의 오른쪽에서 사용되면 겟 - 접근자가 호출된다. using System; class PropertyClass{..

모던 C++ 함수형 프로그래밍 null 포인터

++ 이전의 C++과 비교하면 모던 C++에서는 어떤 것이 달라졌는지, 사실 많은 변화가 있었음은 알지만 그럼에도 불구하고 필자는 해당 기능들을 잘 알지 못한다. 때문에 게시글과 같이 성장하고자 매일 C++에 관련된 포스팅을 하고자 함을 기반으로 필자의 학습에 초점을 두어 작성되는 작성된 게시글이기에 독자 위주의 게시글이라기 보다는, 필자의 독서 기록용 게시글이 취지에 더욱 맞음을 인지해주고 읽어주길 바란다. ++ [ 프로그래밍 패러다임(Programming Paradigm) ] 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 한다. 새로운 프로그래밍 패러다임을 통해서는 새로운 방식으로 생각하는 법을 배우게..

C#

C#은 .NET 환경에서 효과적으로 응용 프로그램을 개발할 수 있도록 설계된 C 언어 계열에 속하는 범용 프로그래밍 언어이다. C#은 C언어와 유사한 간결하고 강력한 문장 구조를 가지고 있으며 C++ 언어와 같이 객체 지향적일 분만 아니라 쉽게 사용자 인터페이스를 쉽게 만들 수 있는 컴포넌트 기능을 제공하고 있습니다. C#은 .NET 환경에 최적화 되어 있고 C# 언어를 위한 많은 클래스 라이브러리가 개발됨에 따라 응용 프로그램을 작성하기가 보다 편리해졌다. C# 언어의 특징으로는 자료 추상화와 델리게이트와 이벤트, 예외 처리, 멀티 스레드 등을 들 수 있다. 자료 추상화란 자료 구조와 더불어 그 자료 구조에서 행할 수 있는 연산을 정의하여 사용자 정의 자료형을 마치 언어 시스템에서 제공한 자료형처럼 사..

모던 C++ 함수형 프로그래밍 decltype

++ 이전의 C++과 비교하면 모던 C++에서는 어떤 것이 달라졌는지, 사실 많은 변화가 있었음은 알지만 그럼에도 불구하고 필자는 해당 기능들을 잘 알지 못한다. 때문에 게시글과 같이 성장하고자 매일 C++에 관련된 포스팅을 하고자 함을 기반으로 필자의 학습에 초점을 두어 작성되는 작성된 게시글이기에 독자 위주의 게시글이라기 보다는, 필자의 독서 기록용 게시글이 취지에 더욱 맞음을 인지해주고 읽어주길 바란다. ++ decltype 키워드로 표현식 타입 질의하기 auto 키워드는 변수에 저장된 값이 어떤 타입인지 참고해 변수의 실제 타입을 지정할 수 있다. 또 반환하는 값의 타입을 보고 함수의 반환 타입 역시 추론이 가능하다. auto 와 decltype 키워드를 조합해서 모던 C++을 좀 더 체계적으로 ..

모던 C++ 함수형 프로그래밍 auto

auto 키워드 auto 키워드로 데이터 타입을 자동으로 정의하기 위해서는 일단, 모던 C++ 이전에 auto 키워드는 변수가 자동 지속 기간(automatic storage duration)을 가져야 함을 명시적으로 나타내기 위해 사용했다는 것을 알아두자. ++ 이전의 C++과 비교하면 모던 C++에서는 어떤 것이 달라졌는지, 사실 많은 변화가 있었음은 알지만 그럼에도 불구하고 필자는 해당 기능들을 잘 알지 못한다. 때문에 게시글과 같이 성장하고자 매일 C++에 관련된 포스팅을 하고자 함을 기반으로 작성된 게시글이기에 필자의 학습을 초점에 맞춰 작성되기 때문에, 독자 위주의 게시글 이라기 보다는 필자의 독서 기록용 게시글임을 인지해주고 읽어주길 바란다. ++ 자동 지속 기간(automatic stora..

상황에 맞는 키워드 (Context-Sensitive Keywords)

상황에 맞는 키워드(Context-Sensitive Keywords) 상황에 맞는 키워드는 오직 특정 문맥에서만 인식할 수 있는 언어 요소이다. 특정 맥락을 벗어나면, 상황에 맞는 키워드는 유저가 정의하는 기호가 될 수 있다. ( = Context-sensitive keywords are language elements that are recognized only in specific contexts. Outside the specific context, a context-sensitive keyword can be a user-defined symbol.) 키워드 목록 abstract delegate event finally for each, in initonly internal literal over..

C++/ CX 와 C++/ CLI 의 차이

C++/ CX(C++ component extensions, c++ 컴포넌트 확장) C++/ CX(C++ component extensions, c++ 컴포넌트 확장)는 마이크로 소프트가 window phone8 과 window 8과 같은 새로운 윈도 런타임을 지원하기 위해 고안한, C++를 확장한 언어 규격이다. 문법이 C++/CLI과 유사하지만, 컴파일한 결과물은 C++/CLI의 Managed Code가 아닌 Native Code이다. 현재 Visual studio 12이상에서 사용 가능하다. C++/CLI(C++/ 공통 언어 기반) C++/CLI(C++/ 공통 언어 기반)은 Managed Extensions for C++ 대신 사용하기위해 고안된 마이크로 소프트사의 언어 규격이다. 예전의 Manag..

C++ 오류 처리

오류처리 C++에서, 프로그램의 예기치 않은 행동을 처리하는 수단은 크게 두 가지이다. 하나는 단언 (assertion)이고 다른 하나는 예외(exception)이다. 전자는 프로그래밍의 실수를 검출하기 위한 것이고, 후자는 프로그램이 더 이상 정상적으로 실행될 수 없을 정도의 어떤 예외적인 상황을 방지하기 위한 것이다. 사실 이 둘의 구분이 항상 명확하지는 않다. 해더 헤더의 assert 매크로는 C에서 물려받은 것이지만 여전히 유용하다. 이 매크로는 주어진 표현식을 평가해서, 만일 결과가 false이면 즉시 프로그램을 종료한다. 이 매크로는 프로그래밍 실수를 검출하는 데 사용해야 한다. 예를 들어 음이 아닌 실수의 제곱근을 계산하는 어떤 알고리즘을 구현한다고 가정했을 때, 수학에서 음수가 아닌 수의 ..