프로그래밍 언어 64

정적 멤버와 상수 멤버

정적 멤버 변수 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이면 즉시 프로그램을 종료한다. 이 매크로는 프로그래밍 실수를 검출하는 데 사용해야 한다. 예를 들어 음이 아닌 실수의 제곱근을 계산하는 어떤 알고리즘을 구현한다고 가정했을 때, 수학에서 음수가 아닌 수의 ..

effective c++

TR1 TR1 C++ 표준 라이브러리에 새로 추가되는 기능들에 대한 명세이다. 새로 추가된 기능들은 클래스 및 함수 템플릿이 주류인데, 해시 테이블, 참조 카운팅 방식 스마트 포인터, 정규 표현식 등이다. TR1의 모든 구성요소는 tr1 네임스페이스에 들어 있고, tr1 네임스페이스는 std 네임스페이스 안에 중첩되어 있다. Boost C++ 라이브러리를 제공하는 단체로 TR1의 구성요소 대부분이 이곳에서 만들어졌다. TR외의 유익한 많은 것들을 참고할 수 있다. http://boost/org C++의 구성 방식과 규칙 C++는 다중패러다임 프로그래밍 언어로 절차적 프로그래밍을 기본으로 객체 지향, 함수식, 일반화 프로그래밍을 포함하여 메타프로그래밍 개념까지 지원한다. C++을 구성하는 하위 언어 C언어..