'Functional World' 카테고리의 글 목록 (3 Page) :: iopeni - Think of C#

오랜 경험을 가진 프로그래머 일 수록 레퍼런스를 모른다??? 


정말 아이러니 한 말이지만 사실 맞는 말이기도 합니다.


오래된 프로그래머 일 수록... 4GL언어의 사용을 오래 한 사람일 수록 레퍼런스를 모르고 사용하는 사람이 많습니다.


사실 C++나 Java 부터 프로그래밍을 사용한 사람들은 레퍼런스 모르고 어떻게 프로그래밍을 하지? 라고 이야기 하는 분들이 많습니다.


그만큼 객체 지향이 강력한 개발 방법론 이기 때문입니다.


그런데 왜 객체지향방법론이 강력한 개발 방법론 이라고 이야기 하는 걸까요? 


왜 요즘 MVC, MVVM, MVP등등 이런 모델 들이 대두 되고 라이브러리 화 되어 개발자들에게 이런 모델을 따르라고 강요 하고 있을까요? 


따지고 보면 어떠한 방법론을 따르던 따르지 않던 프로그램은 안정적으로 실행 되고 오류만 나지 않으면 장땡 이라고 생각 할 수 있습니다.


수 많은 IT 개발 관련 서적들을 보면 OOP를 이야기 하고 OOP 개발 방법론에 따라 개발을 하면 유지 보수 하기 쉽고 뭔가 새로운 요구 사항이 발생 하였을 때 기능의 추가 및 변경이 쉬운 방법론은 OOP라고 이야기 합니다.


얼마나 많은 개발자들이 OOP를 이해 하고 레퍼런스를 이해 하고 있을까요?


일단 저 부터도 제가 얼마나 많이 OOP를 이해 하고 있는지 되돌아 보며 자문해 보기도 합니다. 늘 자답은 절망적입니다. 언제쯤 제대로 알고 사용할 수 있을지.... 늘 고민하게 되는 질문이기도 합니다.


Microsoft Visual C++의 프로그래밍 골격을 보면 예전 부터 View와 Frame과 Document 클래스를 구분해 놓고 MVC아닌 MVC 모델을 선구 했다고 봐도 무방합니다.


예전 알바 시절 만났던 모 전산실 모 개발자 분께서... 그 전산실은 모든 솔루션이... Visual Basic 6로 구현 운영되고 있는 기업 이었습니다.


도대체 문법서가 설명 하고 있는건 알겠는데... 도대체 왜 객체를 써야 하냐... 이게 뭐가 좋은거냐 라고 물어 보시는데.... 정말 마땅히 설명을 할 수 없겠더군요.. 이렇게 물어 보시니 그냥 문법서를 보라고 말씀 드릴 수 밖에 없는... 정말 어려운 질문 이었습니다.


제 나름대로 설명 할 수 있었던 것은 


사실 OOP의 가장 근본적인 이론은 "내가 필요한 것은 나만 가지고 있으면 된다." 에서 부터 시작 합니다.

내가 가지고 있는 기능을 다른 객체가 가지고 있을 필요가 없다는 뜻이며, 어플리케이션이 무엇인가 행위를 하여야 할때 그 기능을 가지고 있는 객체에 실행을 위임하면 된다는 것이죠!(모든 소프트웨어공학의 정답은 인다이렉션이다 라는 이야기도 있습니다.)


이렇게 생각해 보았을 때의 OOP의 요지는 "가장 구린내 나는 코드는 여기 저기 중복 코드가 산재해 있는 코드가 가장 구린내 나는 코드다" 라는 겁니다.


다른 측면에서 보면 크게 보았을 때 어플리케이션의 구성 요소는 데이터와.. 현재 프로그램의 상태라는 두가지 구성 요소로 귀결 된다고 볼 수 있습니다.


사용자에 의거 하여 어플리케이션의 상태가 변경(이벤트의 발생) 되었을 때 이 상태를 어떻게 객체에 전달 하여, 객체가 가지고 있는 데이타를 변형하고, 변형된 데이타를 어떻게 출력 장치에 표현할 것인가? 라는 문제이죠.


때문에 객체간 이벤트의 전달 및 객체간 데이타의 전달이 어떻게 구성되고 이루어져야 하는지에 대한 설명이 가장 큰 핵심이라고 볼 수 있습니다. 


결국 값 형식의 자료형과 레퍼런스 형식의 자료형을 어떻게 전달 하며, 전달이 이루어 졌을 때 어떻게 기능을 위임하여 처리 할 것인가가 모든 설명의 요지 입니다.


이렇게 함으로써 중복 코드의 방지가 이루어지고 중복 코드가 방지 되면 기능의 변형 및 수정이 용이 하고 이렇게 함으로써 프로그램의 유지 보수 관리가 쉬워 진다는 것입니다.


이 때문에 클래스를 사용하고 레퍼런스를 사용하는 것입니다.


결국 "어떻게 클래스를 만들어서 레퍼런스로 전달 하여.. 처리를 위임할 것인가?" 의 문제 입니다. 


정말 수 많은 모델이며 방법론들 DCOM, COM, CORBA, WCF...... 등등등... 정말 많은 것들이 전부 사실 보면 데이터와 기능(코드)를 분산 집중 하는 방법인 겁니다.


어떤 기능과 데이타가 어떤 객체에 위치할 것인가의 고민이 어느 지역 어느 서버 어느 클라이언트에 위치하여 사용할 것인가의 문제로 확대된 것이기는 하나 원리는 그렇습니다.


그래서 리팩토링을 보면 재 활용성을 높이기 위하여 가장 먼저 실천에 옮겨야 하는 것이 "기능 구현시 코드를 쪼갤 수 있는 만큼 쪼개라, 이것이 재활용성을 높이는 발판이 될 것이다." 입니다.


이것이 중복 코드를 제거하는 지름길이며, 이것이 분산 집중 방법의 초석이 됩니다. 여기서 부터 시작인 겁니다.


이것이 왜 OOP를 써야 하는지 왜 레퍼런스를 써야 하는지에 대한 설명 입니다.


이것에 덧 붙여 OOP를 사용하고 있는 많은 개발자들이 4GL언어를 쓰고 있는 오래된 개발자들이 저지르고 있는 첫번째 실수를 무엇이라고 생각하냐 하면... 우리의 구루중 한명이신 찰스 펫졸드 아저씨도 말씀하고 계신 내용으로 "전역변수의 사용을 남발하지 말라!" 입니다.


전역 변수를 사용 이 객체 저 객체에서 공유하게 되면 각각의 객체가 가진 상태에 따라 데이타의 가공이 이루어져야 하는데 이 때문에 하나의 객체에서 데이터를 가공하게 되면 다른 객체에 영향을 주게 되고 이것은 어플리케이션의 안전성에 치명적인 악영향을 끼치게 된다는 것입니다. 이 치명적 악영향을 돌아가기 위해 객체는 또 각각의 객체가 다시 상태를 분석하여 처리하기 위한 쓸데없는 코드가 생성 되고 이것으로 코드는 점점 더 스파게티가 되고 유지 보수 하기 어려워지는 단점으로 전역 변수의 사용의 자제를 권장 합니다.


바로 이러한 이유 때문에 리팩토링을 하여야 하며, OOP 방법론의 코딩을 권장 하는 것입니다.




'Functional World > 리팩토링' 카테고리의 다른 글

리팩토링(Refactoring) 이란?  (0) 2013.11.01
Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,


IronJS 는 ECMAScript 3.0 규약을 준 수 하고 있는 Microsoft .Net 에서 구동 하는 JavaSctipt 런타임 라이브러리 입니다.


이렇게만 말씀 드리면 ??? 이게 뭐야 하시겠죠?


혹시 Microsoft Dynamic Language Runtime이라는 것을 들어 보셨나요? 


마이크로소프트는 닷넷 환경에서 수많은 언어를 사용할 수 있다고 말합니다. 파이썬, 루비, 포트란등등 말이죠.

사실 이렇게만 보면 이게 무슨 소리인지 감이 오지 않습니다.


우리가 알고 있는 .Net은 


개념적으로 CTS(Common type Specfication) -> CLR(Common Language Runtime) - > Language 인데 말이죠.. 

이렇게 보면 Dynamic Language Runtime 이라는 것은 눈을 씻고 봐도 보이지 않습니다.


예전의 프로그래밍 모델들을 보면 각각의 플랫폼 및 언어 종속적이라. 마이크로소프트 윈도우 플랫폼의 VC++ 로 만든   Component를 Linux 플랫폼의 자바에서 사용하려고 하면 정말이나 힘들었습니다. 


여기서 부터 미쳐 버리죠.. 마샬링이다 뭐다. 정말 복잡 다단한 이야기들이 많이 나옵니다.


그런데 이런 복잡한 이야기들을 근본적으로 이해 하기 쉽게 바라보면 C++이 가지고 있는 lptstr 이라는 롱포인터스트링 타입을 자바는 가지고 있지 않습니다. 이런 문제 인거죠 C++이 가지고 있는 타입을 자바는 가지고 있지 않으므로 C++의 타입과 자바의 타입을 매칭 시켜서 자바가 이게 뭔지 알아야 사용 할 수있다는 것이죠. 


세상은 너무나 빠르게 발전했고 Microsoft는 Dynamic Language Runtime을 발표하면서 dynamic 이라는 마법사 같은 타입을 내 놓았습니다.


var 타입도 사용할 때 신중하게 사용해야 한다고 하는데... 웬 dynamic??? 이라고 말씀하신다면 맞습니다. 사실 다이나믹 타입으로 생성한 변수를 반복 연산을 수행하였을때... var이나 int타입으로 생성한 변수 보다 어마 어마 하게 느립니다. 이건 뭐 절망적으로 느껴집니다. 


그러나 말이죠...이 dynamic 이라는 타입이 마술사 처럼 타입 변경을 해 가면서 어떤 타입인지 매칭 해 준다는 이야기 입니다. 무엇을 기준으로????? CTS를 기준으로 말이죠. 개발자는 거의 신경을 쓰지 않아도 타입맵핑을 해 준다는 뜻입니다. 물론... 사실 프로그래밍을 하며 타입을 모른다는 건 말이 안됩니다.


그래야 타입캐스팅도 하고 자료를 가공하고... 맞습니다. 더불어 dynamic 타입은 런타임에 타입이 결정되기 때문에 그 전에 타입 검사를 아무리 해도 검사 할 수 없습니다.


런타임에 결정되므로 이게 스트링일지 정수형일지 더블형일지 모른다는 것이죠. 모르기 때문에 타입검사도 할 수 없고. 모르기 때문에 타입캐스팅도 할 수 없습니다. 


꼬박 꼬박 런타임에 확인 해야 합니다. 이런 이야기와 함께 중요한 내용이 공변, 반공변 같은 복잡 다단한 이야기가 또 파생되긴 하지만, 사실 알고보면 아무것도 아니지만..... 정말 어렵기도 합니다.


IronJS와 함께 IronPyton, IronRuby등 .Net 에서 구동가능한 라이브러리가 오픈 프로젝트로 진행 되었고 현재 정말 많은 진척 상황을 보이고 있습니다.


IronJS는 여러분이 알고 계시는 자바스크립트 와 완벽한 문법적 호환을 보장 한다고 해도 무방 할 듯 합니다.


제가 글을 쓰면서도 제가 무슨 개소리를 하고 있는지 모르겠습니다. 


한마디로 정의 하죠.... DLR(Dynamic Language Runtime)이라는 녀석은 .Net 어플리케이션이 실행 된 상태에서 사용자가 파이썬, 루비, 자바스크립트, 비쥬얼베이직 스크립트 언어와 같은 다른 언어를 이용해 사용자가 스크립트 프로그래밍을 하여 실행 할 수 있다는 소리 입니다.


제가 이렇게 설명을 했는데도 잘 모르시겠다면.. ^^ 우리의 성경책.... MSDN을 보시면 좀 더 쉽게 설명이 되어 있는거 같습니다.


http://msdn.microsoft.com/ko-kr/library/dd233052.aspx


다시 본론으로 돌아와서 IronJS를 조금 더 설명하자면....


라이센스는 

IronJS is released under the Apache License Version 2.0 을 따르고 있습니다.


IronJS 라이브러리를 사용하기 위하여 필요 한 사항은 단지 .Net Framework 3.5, 4.0, Mono 2.10 이면 됩니다.


이 라이브러리를 다운 받을 수 있는 경로는 


git을 사용하는 분들께서는 

  • git clone git://github.com/fholm/IronJS.git IronJS
에서 다운 로드 받으실 수 있습니다.


git을 사용하지 않으신다면 아래 클릭하시면 다운 받으 실 수 있습니다.

https://github.com/fholm/IronJS/archive/master.zip



IRonJS의 공식 블로그는

http://ironjs.wordpress.com/ 입니다.


우리의 어플리케이션에 스크립트 컴파일러를 달아서 무언가 동적으로 알 수 없는 기능을 추가 하여야 할 경우 이만한 솔루션은 없어 보입니다.



Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

어플리케이션의 활성화 폼을 체크 하여야 할 경우가 발생 하였습니다.


어렵지 않은 일이 좀 곤란해져 버렸습니다.


Form.Active 프로퍼티는 직접 접근이 불가하고 


폼이 위치한 곳과 체크하는 곳의어셈블리가 틀려 


Form.ActiveForm은 사용 불가.....


Application.OpenForms를 가지고 FormCollection을 반환 받고 보니 Active상태된 폼을 얻기가 이만 저만...

피곤한 일이 아닌거였습니다.


사실 가져다 확인 할 수 있는 프로퍼티가 없어 보이더군요.


예전 API를 이용해서 확인 하였던 방법은.. 당췌 기억이 나지도 않고.....


사람은 망각의 동물이라더니... 점점 노화 되는 머리는 세월을 이길 수 없나 봅니다.


그래서 약간의 편법을....


 Form frm = Application.OpenForms.Cast<Form>().Last();


이 코드로 마지막 열린 폼을 취득하여, 현재 활성화 된 폼으로 인지 하도록 코딩


이거 참... 세상에 쉬운일이 없습니다.


정상적인 방법이 아니므로 더 좋은 방법이 없을지 고민좀 해야 겠습니다.



Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

WPF를 처음 접하였을 때 정말 복잡한 암호 처럼 보였던 

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

라는 문장을 보며 당췌 이게 뭐하는 것인지 몰랐습니다.


익스플로러에 저 URL을 두들겨 봐도 아무것도 없는 황당함... 외우는 것에 취약한 저는 쉐뜨를 연발 하며, WPF는 내가 공부 할 수 있는 뭔가가 아닌가보다 라며 절망에 빠졌던 기억이 있습니다.


어셈블리 PresentationFramework.dll version 4.0.0.0 을 디스어셈블 하여 보니....

다음과 같이 NameSpace와 맵핑 된 것이 하드 코딩 되어 있는 것을 확인 할 수 있었습니다.


1. winfx 영역

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Shapes")

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Navigation")

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Controls")

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Documents")

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Shell")

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Data")

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows")

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation","System.Windows.Controls.Primitives")

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation","System.Windows.Media.Animation")

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Input")

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Media")

XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml", "System.Windows.Markup")


2. netfx 영역

XmlnsDefinition("http://schemas.microsoft.com/netfx/2009/xaml/presentation", "System.Windows.Controls")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2009/xaml/presentation", "System.Windows.Navigation")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows.Documents")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows.Shapes")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows.Shell")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows.Navigation")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows.Data")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation","System.Windows.Controls.Primitives")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation","System.Windows.Media.Animation")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows.Input")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows.Media")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2009/xaml/presentation", "System.Windows.Shapes")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2009/xaml/presentation", "System.Windows.Shell")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2007/xaml/presentation", "System.Windows.Controls")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2009/xaml/presentation", "System.Windows.Data")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2009/xaml/presentation", "System.Windows")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2009/xaml/presentation","System.Windows.Controls.Primitives")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2009/xaml/presentation","System.Windows.Media.Animation")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2009/xaml/presentation", "System.Windows.Input")

XmlnsDefinition("http://schemas.microsoft.com/netfx/2009/xaml/presentation", "System.Windows.Documents")


3. xps영역

XmlnsDefinition("http://schemas.microsoft.com/xps/2005/06", "System.Windows.Input")

XmlnsDefinition("http://schemas.microsoft.com/xps/2005/06", "System.Windows.Media.Animation")

XmlnsDefinition("http://schemas.microsoft.com/xps/2005/06", "System.Windows.Controls")

XmlnsDefinition("http://schemas.microsoft.com/xps/2005/06", "System.Windows.Documents")

XmlnsDefinition("http://schemas.microsoft.com/xps/2005/06", "System.Windows.Shapes")

XmlnsDefinition("http://schemas.microsoft.com/xps/2005/06", "System.Windows.Navigation")

XmlnsDefinition("http://schemas.microsoft.com/xps/2005/06", "System.Windows.Data")

XmlnsDefinition("http://schemas.microsoft.com/xps/2005/06", "System.Windows")

XmlnsDefinition("http://schemas.microsoft.com/xps/2005/06", "System.Windows.Controls.Primitives")


사실 WPF를 학습하면서 XAML이 어떻게 구성되며, 어떤 네임스페이스를 사용하는지 알아야 하는 경우는 발생하지 않았으나 XAML을 구성하는데 있어서 어떤 네임스페이스를 사용하고 있는지 알아 두는 것도 나쁘지 않을 것 같아 정리 합니다.


XAML 코드에 기본 네임스페이스 말고 다른 네임스페이스를 언제 사용하게 될지 모르기 때문에 말이죠. 


사실 이 정리는 역어셈블을 통해 취득한 내용이므로 이것이 전체 네임스페이스 인지 아닌지는 알 수 없습니다.

아마도 제가 찾지 못했던 MSDN의 어느 구석에는 이 맵핑 정보가 있을지도 모르겠습니다.


OTL... 이 맵핑 정보 하나 알아내는 것도.. 어마 어마한 노력이...... 머리 나쁜 개발자는 점점 더 설곳이 없어지는거 같습니다......... 


http://msdn.microsoft.com/ko-kr/library/ms747086(v=vs.110).aspx

MSDN의 관련 정보 입니다.

Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

Refactoring 이란 단어는 영어 사전에는 존재 하지 않습니다.


factoring의 의미가 직역 하였을 경우 인수 분해 라는 뜻을 가지고 있으므로 다시 인수 분해 한다 라는 뜻으로 봐도 무방 하다????? 라고 생각 할 수도 있겠습니다.


마틴 파울러의 Refactoring 이라는 책이 2002년에 출간 되었다가 절판 이후 2012년 11월에 다시 출간 되었습니다.



 교보 문고의 서적 소개를 보면 이 책은 개발 1~2년차가 보기에 적합한 것으로 명시 되어 있지만, 개인적인 소견으로는 누구든 소프트웨어 개발직을 업으로 삼고 있는 사람이라면 한번쯤은 볼 만한 책이라고 생각 됩니다.


책의 난위도는 매우 쉽습니다. 그냥 한번 쭈욱 읽어 나갈 수 있는 그런 책 입니다.


이 책의 제목에서 표기 하고 있듯이 리팩토링이란 코드 품질을 개선하는 객체지향 사고법이라고 정의 되어 있습니다.


여러분은 GOF의 Design Pattern을 여러분의 프로젝트에 적극적으로 활용 하고 계신가요? 만약 Design Pattern의 달인 이라면 이 책을 보실 필요는 없습니다.


이 책의 저자 마틴 파울러가 이런 말을 하고 있습니다. "모든 개발자는 디자인 패턴에 머물고 싶어 하고, 리팩토링은 디자인 패턴에 도달 할 수 있도록 하는 방법이다." 라고 말이죠.


예전 아르바이트로 프리랜서 일을 했던적이 있는데 당시 개발 2~3년차 된 친구의 코드를 보고 깜짝 놀랜적이 있습니다.


너무 깔끔하고 OOP가 적용 가능한 언어가 아닌 Visual Basic 6를 가지고 Singleton, Observer등등 몇가지 패턴들을 구현해 놓았더군요.. 제 상식으로 이게 가능해? 라는 의문을 가지고 있을 쯤 이 친구가 자기는 Refactoring 이란 책을 보고 너무 깊은 감명을 받았다고 저에게 이야기 해 주더군요


깔끔한 코드.... 유지 보수 하기 좋은 코드... 남에게 보여주기 부끄럽지 않은 코드... 이런 코드를 원하신다면 이 책을 한번쯤 보는 것을 강력 추천 합니다.


글을 쓰다 보니 책 장사가 되어 버린것 같습니다. 참고로 저는 책 장사는 절대 아닙니다.


앞으로 리팩토링이라는 주제를 가지고 단지 제가 느끼는 것들을 좀 적어 볼까 하는 욕심에 이런 코너를 두고 이 책을 보며 제가 느끼는 것들을 정리 하려 함일 뿐입니다.


뒤늦은 공부... 뒤늦은 깨우침이 아쉬울 뿐입니다.



Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html


에 보면 Oracle Database 12 버젼을 지원하는 ODT가 업데이트 되었습니다.





그런데 말이죠 불행하게도 아직 Visual Studio 2013을 지원하지 않습니다.


언제 쯤 Visual Studio 2013을 지원하는 ODT가 발표 될까요? 기다려 지네요.


현재 제 개발 노트북의.. OS 는 Windows 8.1 Pro 입니다.


64bit Oracle Client 가 윈도우 8.1 에서는 설치 조차 되지 않는 군요. 


오라클이 빨리 지원해주기만을 학수 고대 합니다.


Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,



블로그에 올리고 나니... 이미지 글자가 작아져서 알아 보기 힘드네요...


그래서.. ^^ 이미지 추가 해 놓습니다. 


WhatsNewNET45-en.zip

많은 것들이 추가 및 확장 되었네요. ^^




이 많은 것들 중.... 40% 만이라도 자유롭게 쓸수 있는 개발자가 되었으면 좋으련만.... 


없으면 만들어 쓰라는 주의라.... 있음에도 불구하고 몰라서.. 시간과 노력을 들여 만들어 쓰고 있는 무식함이.......부끄럽기만 합니다.

'Functional World > .Net Framework' 카테고리의 다른 글

호기심 해결  (0) 2017.01.13
Ms Chart Control Sample  (0) 2013.08.26
Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

10월 중순 MSDN에 조용하게 Visual Studio 2013이 게재 되었습니다.


직업이 직업인지라.... 일단은 설치 하고 구경해 보기로 하였습니다.




이거 설치 하고 보니까. 클래스 메소드 등에 참조 갯수를 표시해 줍니다. (위 그림의 화살표 영역)


클래스 참조 총 갯수와 메소드별 참조 갯수를 미리 파악 할 수 있다는 것은 정말 큰 장점으로 보입니다.


저희 팀에 있는 WPF를 이용하여 프로젝트를 진행하고 있는 어여쁜 동생은 2010까지의 WPF 파서가 좀 이상했는데 2012는 2010보다 좋아졌고 2013은 2012에 비해서 더욱 좋아졌다고 행복해 하더군요.


 일단 제가 담당하고 있는 파트는 DLR(Dynamic Language Runtime)을 이용하여, 프로젝트를 진행하고 있습니다. Visual Studio 2012에서는 Runtime에 동적으로 만들어진 데이터의 타입을 타입캐스팅 하는 과정에서 64비트 디버깅 모드에서 코드 수정 및 추가를 할 수 없어 32비트 디버깅 모드로 꼭 디버깅을 한 후 AnyCPU 모드로 전환 하여 릴리즈 하여야 하는 어찌 보면 조금만 불편하면 될 문제가 저에게는 상당한 귀차니즘으로 작용했고, 이 때문에 사실 좀 많이 짜증스러워 하였는데, 2013부터는 64비트 디버깅 타임에 코드 수정 및 추가를 진행하는데 있어 전혀 무리가 없습니다. 이 부분이 사실 저에게는 가장 큰 장점으로 와 닿는 군요. 


사실 디버깅 타임에 비쥬얼 스튜디오가 반응하는 반응시간이 2012에 비하여 좀 느린듯 하기도 하지만... 불편해 하던 것이 감소 되었다는 장점에 "일단 되는게 어디야....." 라며 행복해 하고 있습니다.


마이크로소프트 계열의 툴을 사용하고 있는 개발자는 나태하고 게을러 Visual Studio가 없으면 단 한줄도 코딩하지 못한다는 이야기들이 많은데... 사실 저부터도 비쥬얼 스튜디오 없이 코딩하고 싶은 생각은 없습니다.


어찌 되었든 Microsoft의 IDE는 강력했고 더욱 더 발전된 IDE를 보여 주고 있습니다.


이 새로운 툴을 사용하며... 만나게 되는 자그마한 팁들을 앞으로 블로그에 좀 담아 보려 합니다.


일단 오늘은 UltraEdit와 같은 에디터나 예전 오라클의 Sql Plus 에서 블럭을 잡고 스트링을 수정했던 기능이 IDE에서는 제공하지 않아 불편 하셨던 모든 분들에게 희소식이 될 듯 합니다.



Shift + Alt + Arrow Key를 이용하여 블럭을 잡은 후 텍스트를 수정 하면 일괄적으로 수정 변경 할 수 있습니다.


그림으로 보면 아래와 같습니다. 


Shift + Alt + Arrow key를 이용하여 블럭을 잡은 그림 입니다.



const라는 키워드를 블럭을 잡았고 이 상태에서 타자를 치게 되면 아래와 같이 const 키워드가 일괄적으로 변경 됩니다.



코딩 속도가 한결 빨라질 수 있을 듯한... 여러분은 이 기능이 마음에 안 드시나요? 전 무척이나 행복합니다.


물론 2012에도 제공되는 기능이었는데... 전 모르고 있다가... 2013에서 발견 하였네요. ^^;;


Edited by iopeni 


Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,



Visual Studio 2013 RTM 이 다음달 13일에 공식 런치 된다는 소식입니다.


한달 뒤면... 정식 버젼을 만나 볼 수 있겠네요.

Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,

static 클래스로 정수형을 바이트 배열로 취득 할 수 있는 클래스 존재.


var bytes = BitConverter.GetBytes(value);

if (BitConverter.IsLittleEndian) { bytes = bytes.Reverse().ToArray(); }



자세한 내용은 

http://msdn.microsoft.com/ko-kr/library/vstudio/system.bitconverter(v=vs.100).aspx


참조.

Posted by 프로그래머란 카페인을 코드로 변환하는 기계다
,