Notice
Recent Posts
Recent Comments
Link
- Korea times
- 끌리면 오라...BGM 광고음악 라이브러리
- KartOO visual meta search engi…
- E-Book
- Channel9
- MSDN
- 여리의 작업실
- 유경상의 .NET 블로그
- window 쪼물딱 거리기
- 블루 홈(소현이 누님)
- IT 관련 전반 내용(정환이네)
- 비너스의 정보 공유(유틸리티들)
- 형기의 자료공간(디지털ERA에서 콘텐츠ERA로)
- EzineArticles (여러 분야의 글들이 올라옴)
- Relationship을 보여주는 라이브러리
- OpenRCE
- 젠틀의 블로그(무선 통신의 모든것)
- 헐랭이와 IT보안
- 워니. 추억ㅇㅔ ㅂㅣ추ㅇㅓ.
- Computer Forensics
- 토익 광장(YBM)
- Korea Times 이용하기
- Larkware Software
- TCP/UDP
- Black Hat
- DEF CON
- Slashdot
- ReallyUsefulEbooks.com Update
- 실리콘밸리 뉴스
- Application Development Trends
- Visual Studio Hacks
- MIT OCW
- Redmond Developer News
- SecurityFocus
- Microsoft Window Hacking Porta…
- Darknet - Don't Learn to Hack …
- Windows Tips, Tricks and Hacks
- Hack In the Box
- (IN)SECURE Magazine
- SuperSite Windows Vista
- Government Security
- Life is Still Talking (Good)
- PHRACK
- Found+Read(resource for startu…
- Jonathan Boutelle
- Venture Hacks
- 스마트플레이스
- All about Intellipedia
- Undocumented Windows 2000 Secr…
- HexBlog (Decompiler)
- TED (Ideas worth spreading)
- Crash Dump Analysis and Debugg…
- Rootkit
- DDK Developers(MS)
- 미친 감자의 블로그
- The Art of Assembly Language
- Chpie (키보드 후킹)
- Drivers Online
- (음악) Delicate SONG
- Reverse Engineering Community
- Software Best Practices
- Sara Ford's WebLog
- Cheat Happens
- Debugging,Unpacking,Assembling…
- 윤석찬님 블로그
- OK 괜찮아 다 잘 될거야
- RingBlog
- Art Life :: 하늘소
- IT's Paradise
- John Robbins!
- Wintellect
- Hacked Gadgets
- 소프트웨어 이야기
- Ryan Naraine's Zero Day
- VULN
- Stay Secure
- EBS 영어 공부(블루워터)
- 101BLoG : "Bright Size Life" o…
- Hacker Challenge
- Hackers Center
- White Hat, Chicago Con
- Ethical Hacker Network
- ChaseNet (Security)
- TechTarget
- Entrepreneur
- Infopackets
- Popular Science
- Dark Reading - The Business of…
- How Stuff Works
- codeDriver - Crack (역공학)
- Gadget (Windows)
- Serious Code
- Iguacu Blog(블루문)
- SecurityProof
- Power of Community(Hacker)
- Crack ?
- Security Freak
- Data Network Resource
- FoundStone - Security Consulti…
- Google Online Security Blog
- (BOOK) Cool DogBooks
- SachaBarber (좋은 개발자)
- System Software Incorporation
- 스카이 벤처
- NewsTorrent
- 글로벌 IT 네트워크
- Ethical Hacking and Infosec
- Realms of Hacking tricks
- CodeBreakers Journal
- Anti Rootkit Blog
- The Reverse Code Engineering C…
- Anti-Debug Tools
- Reverse Code Engineering Video…
- Damn Vulnerable linux
- Security Problems
- French Reverse Engineering Tea…
- Monac
- Open Source Vulnerability Data…
- Viruschaser 검사(바이러스)
- Windows Tips
- 보안 대처 연습
- [Download] Kartz CD
- [Download] FlMS Download
- [Download] DDL2
- 중국 해킹 사이트(안전중국)
- 바이러스 분석
- Javascript 전문가
- Virus Alert Zone (바이러스 분석)
- Computer World
- 문스랩닷컴(보안)
- Unpack China
- Black Storm Reverse Engineerin…
- 역공학 Reverser
- 문화 망명지 - 시, 소설
- WPF MVP
- Research Channel
- The Problem Solver - C# MVP
- Reversing - 리버스 엔지니어링
- Nigel Spencer's Blog (.NET)
- Kirill Osenkov (.NET C# IDE Te…
- H33T (BitTorrnet 검색 사이트)
- ITL (해킹, 보안)
- ITL (Invisible Things Lab) Blo…
- ebook, pdf, chm
- 주식 - 멘토클리닉
- CherryLove - 바이러스, 백신, 악성코드
- PMP
- 영원한 해커, hacker
- 리버싱, PE
- 신호철 - dsphome
- TechEd 2009
- SHOUT
- [도서] 오디오북
- [도서] 전자책
- [도서] 국내도서요약
- [도서] 해외도서요약
- TopCorder - 프로그래밍 연습
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Microsoft
- hacking
- 비주얼 스튜디오
- .NET Framework
- WPF
- MVP
- 비주얼스튜디오
- Visual Studio
- 디버그랩
- 해킹
- english
- VSTS
- 역공학
- 닷넷
- 구글
- .net framework 4
- 책
- visual studio 2010
- 마이크로소프트
- Windows
- 디버깅
- 보안
- debugging
- C#
- Windows 7
- security
- VSTS 2010
- .net
Archives
- Today
- Total
NaggingMachine
[C# 4.0] 이름으로 접근하는 매개 변수(Named Parameter) 본문
프로그램이란 코드라는 측면에서 바라볼때 수많은 함수를 논리적인 흐름에 맞도록 구성한 것이라고 생각해볼 수 있겠습니다. 그래서 코드 작성에 관한 소프트웨어 서적들은 함수를 잘 관리하고 구성할 수 있는 능력이 얼마나 중요한지를 강조하고 있습니다. 오늘은 C# 4.0에 새롭게 추가될 Named Parameter에 대해서 살펴보겠습니다.
결론부터 말씀드리면, Named Parameter는 매개 변수의 이름을 통해서 함수에 매개변수를 전달한다 정도가 되겠습니다.
자, 다음과 같은 코드가 있다고 보죠.
이와같이 정의된 함수는 다음과 같이 다양한 방법으로 호출 할 수가 있습니다.
M(1, 2, 3); // 일반적인 호출
M(1, 2); // z 생략, M(1, 2, 7)과 같음
M(1); // y와 z 생략, M(1, 5, 7)과 같음
자, 그런데 만약 y는 생략한채, z만 넘겨주고 싶을 때 어떻게 해야 할까요? 아마도 가장 자연스러운 방법은 다음과 같이 y를 생략한채 호출하는 방법일 것입니다.
M(1, , 3); // y 생략
하지만 안타깝게도 이와 같은 방법은 제공되지 않습니다. 저도 이 방법은 적당하지 않다고 생각합니다. 왜냐하면 코드 작성에 있어서 코드를 작성한 개발자의 의도가 분명하게 반영되지 않을 수 있고, 매개 변수가 많은 경우에 개발자가 실수를 할 수도 있기 때문이죠. 어떤 경우냐구요? 자, 다음과 같은 예를 한번 살펴보겠습니다.
public void M(int x, int y = 5, int z = 7, int a = 9);
이 경우 만약 M(1, , 3)과 같이 호출했다고 해보겠습니다. 당연히 내부적으로는 M(1, 5, 3, 9)와 같이 호출되었다고 생각되겠죠. 하지만 만약 개발자가 M(1, 5, 7, 3)을 의도했다면, 그러니까 실수로 z를 생략하기 위한 콤마를 하나빠뜨렸다면? M(1, , , 3)? 콤마를 하나빠뜨린 상황때문에 엄청난 문제가 발생할 수도 있습니다. 개발자는 언제나 발생 가능한 모든 경우를 고민해야 하니까요. 잘못된 코드로 인해 누군가의 생명이 위험에 처해질 수도 있습니다.
어쨌든 개발자는 모든 코드를 명시적으로 작성해야할 필요가 있고 다행스럽게도 C# 4.0에서는 이름을 직접 지정해야하도록 스펙을 구성하였습니다. y를 생략한채 함수를 호출하는 방법은 다음과 같이 3가지 방법이 있겠습니다.
M(1, z: 3); // z를 지정해서 전달
M(x: 1, z: 3); // x와 z를 지정해서 전달
M(z: 3, x: 1); // 순서를 바꾸는 것도 가능
정말 간단하죠? 추가적인 설명이 필요없을 정도로 간단한 방법으로 함수를 호출할 수 있겠네요~
여기까지는 C# 스펙에 나와있는 내용을 간추려서 정리한 것이구요. 다음은 제가 이 스펙의 내용을 보고 생각해볼 문제점들에 대해서 추가적으로 정리해 보았습니다. 여러분들은 어떻게 생각하시는지요?
1. 매개 변수의 이름이 중요하다.
이전까지는 함수 정의시에 매개 변수의 이름은 작성자와 사용자의 이해를 돕기 위한 것일뿐 실제로 코드 상에서는 어떠한 의미도 갖지 못했습니다. 하지만 Named Parameter가 적용되는 C# 4.0이후부터는 개발자들이 매개변수의 이름에도 주의를 해야할 것입니다. 지나치게 길어서 사용하기 불편해서도 안되며 실제로 사용되는 의미와 크게 벗어나는 이름을 만들지 않도록 주의해야 합니다. 심지어는 이로 인해 회사의 코드 규칙(Coding Rules)이 업데이트 되어야 할 수도 있겠네요. 2
2. 매개 변수 이름 변경이 어려워진다.
네, 그렇습니다. 매개 변수의 이름을 통해서 함수 호출이 가능하기 때문에, 매개 변수 이름을 바꾸면 관련된 코드를 모조리다 바꿔야 하겠습니다. 리팩토링 기법이 꼭 필요하겠네요. 어쩌면 이런 이유 때문에 Named Parameter를 사용하지 못하도록 코드 규칙을 만들어 둘수도 있겠군요. 항상 새로운 기술을 도입해야 할 필요는 없는 거니까요. 지나친 확장성으로 인해서 심각한 문제가 발생해서는 안될테니까요. 만약 서드파티 라이브러리라면 어떨까요? 매개 변수 이름에 좀더 신중을 기해야겠죠?
'Visual Studio' 카테고리의 다른 글
Visual Studio 2010 베타 1이 공개되었습니다. (2) | 2009.05.19 |
---|---|
동적으로 C# 코드 결과 확인하기, Interactive C# Shell (0) | 2009.05.18 |
새로 업데이트된 C# 4.0 스펙 받아보세요~ (0) | 2009.05.17 |
특정 함수를 모니터링 하기 위한 WinDBG 명령어 (0) | 2009.04.13 |
Visual Studio에서 Perl 사용하기 (0) | 2009.04.13 |