2010.07.14 04:03 책 정리/Effective C#

포스트를 만든 목적

  • 공부 하려고

관련 링크

내용

이 두 프로그래밍 패러다임의 차이점은 무엇인가?

  • 프로그램 동작 방식에 차이점을 두고 있다.
  • 명령형은 특정 구문 연산을 통해 상태를 변경 시켜, 프로그램을 동작시키는 프로그래밍 패러다임을 뜻한다.
    예) C, C++, 자바

  • 선언형은 특정 선언으로만 프로그램을 동작 시키는 프로그래밍 패러다임을 뜻한다.
    예) Haskell, SQL, HTML, XML

  • 완전하지 않지만, 함수를 구현 할 수 있는 언어는 어느정도 선언형 프로그래밍을 할 수 있다.

왜 명령적(명령형) 프로그래밍보다 선언적(선언형) 프로그래밍이 더 좋은가?

  • 컴퓨터가 연산되는 구체적인 작동 순서를 나열하지 않고, 알고리즘에만 집중 할 수 있기 때문에
  • 프로그램을 좀 더 빠르게 만들 수 있기 때문에(이미 다 만들어 진것만 선언을 통해 쓰기 때문에)
  • 명령형 보다 버그가 더 없다. 왜냐하면 구체적인 작동 순서를 나열하지 않기 때문이다.

명령행만 해본 나이기에, 무엇이 더 편할지 건지 아직 사실 모르겠다. 하스켈(Haskell)이라도 익히고 나야, 그 차이점을 알 수 있을것 같다. 느낄 수 있을것 같다.

C# 에선 어떻게 선언적 프로그래밍을 할 수 있는가?

attribute 를 이용하면, 가능하다. (하지만 구현 코드를 보았으나, 이것 또한 함수를 명령형 프로그래밍으로 만들어서, 호출하는 것 뿐이 안된다. 즉, 만화책 볼려고 했더니 20권 중 1권이 빠진 느낌이다.)

C#에서 어떻게 attribute를 사용 할 수 있는가? 아래 샘플에서 :

attribute 만 선언을 하여, 다음과 같은 결과를 얻을 수 있다.

  • 컴파일 시, 경고 문구를 볼 수 있다.
  • 비쥬얼 스튜디오에서 녹색 줄로 문제가 있다고 표시는 것을 볼 수 있다.

이렇게 선언을 통해서, 특정한 결과를 얻는 방식이 선언형 프로그래밍이다.

만약 내가 원하는 attribute가 없을 경우, 어떻게 하는가?

새롭게 정의 해 주면 된다. 우선 샘플 코드를 보면:


사용법은 다음과 같은 규칙을 갖고 있는데 :

  • 사용자 정의 Attribute는 Attribute를 상속 받아야만 한다.
  • [새로 정의한 Attribute()] 식으로, 객체를 생성 해야 한다.
  • 사용한 Attribute를 얻기 위해선, 리플렉션을 통해 접근해야만 한다.

여기서 말하는 리플렉션(Reflection)이란, 타입 자체의 정보를 이용해, 작업하는 것을 뜻한다.

결론

  • 꽤 쓸만하니, 알아 두는게 좋으며, 명령형이 없어도 되는 것들에 대해서는 사용하면 좋겠다.

여담

  • Effective C#의 소스 내용 보면, 기본 전제가 리플렉션, Attribute를 안다는 전제에서 설명해서, 이해가 잘 안되었었다.
  • 샘플 코드 작성하고, 테스트 하고, 글 정리하는데 3시간 걸렸으나, 얻은게 많이 있어 다행이다.
    - 하스켈의 존재에 대해서 알았으며, SICP 를 봐야겠다는 결심이 들었다.
    - Attribute 가 선언형 프로그램밍 패러다임을 어느정도 구현 가능하다는 사실을 알았다.
    - Attribute 를 사용 할 수 있게 되었다.
    - 리플렉션을 구사할 수 있게 되었다.

  • .. 늘 그렇지만, 몹시 졸렵다.

  • 하스켈(Haskell) ... 참 생소한 문법이다.


저작자 표시
신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요