윈도우 Powershell 코딩을 하면서 약간 아쉬웠던 부분이 바로 IDE 인데요

 

윈도우에는 Powershell 과 Powershell IDE 가 있는데 윈도우 Powershell IDE 의 경우엔 코딩을 하기에 약간 불편한 감이 있더군요.

 

Auto Complete 기능이나 자동 Formatting 과 같은 기능들이 아쉬운 부분이었습니다.

 

보통 저는 윈도우에서 Powershell 코딩을 할대는 Notepad++ 와 같은 에디터들을 사용하곤 했는데~

 

Notepad++의 Plugin들도 약간씩 아쉬운 감이 있더군요.

 

그래서 인터넷을 검색해 봤습니다.

 

Powershell IDE 프로그램 중에 Freeware 인 프로그램을 찾아보니 Powershell Plus가 나오더군요.

 

Powershell Plus 는 아래 주소에서 다운로드 할 수 있습니다.


 

http://www.idera.com/productssolutions/freetools/powershellplus


 

간단하게 이메일을 넣고~~

 

자신의 컴퓨터 환경에 맞게 다운로드 합니다. 저는 윈도우 7 64 비트 환경이라 x64 파일을 다운로드 받았습니다.

 

다운로드 받은 압축 파일을 압축 해제 하고~ IderaPowerShellPlusInstallationKit-x64.exe 파일을 실행하면 설치가 시작됩니다.

 

설치는 계속~ OK~ OK 이고~ 다음과 같은 화면이 나오면 Install 을 눌러 주면 됩니다.

 

License 와 관련된 화면에서는 당연히 Agree를 해 줘야 하겠죠~ 그 담부터는 또~~ OK~ OK 입니다.

 

설치를 하고 Powershell Plus를 실행하고CTRL + N 을 눌러서 Editor 창을 하나 열고Powershell 코등을 하면 됩니다.

 

for 를 타이핑 한 후에 CTRL+Space 를 눌러 보면~ 아래 그림과 같이 기본 Template이 써 집니다.

 

마치 Eclipse 에서 자바 코딩하는 것 같은 느낌이 들더군요. 또한 if를 타이핑 하고 CTRL+Space 를 누르면 역시 마찮가지로 Template 이 타이핑 됩니다.

 

일반적인 명령어들도 위 그림과 같이 get- 까지 타이핑 한 후에 CTRL+Space를 누르면 입력할 수 있는 명령어들이 나열 됩니다.

 

윈도우 Powershell IDE 에서 가장 아쉬웠던 부분인 Autoformat 기능도 있습니다. 아래 그림과 같이 오른쪽 클릭후에~ Autoformat 을 누르면~ 코드가 예쁘게 정렬됩니다.


 

그 밖에도 Powershell 코드들을 라이브러리화 해서 관리 할 수도 있고~ 너무 좋더군요.

 

Powershell 코딩을 많이 하시는 분들은 적극적으로 활용해 보시면 좋을 것 같네요.


이전 포스팅들에서도 소개한 Cartesian Product 를 C++ 를 사용하여 구성하는 방법에 대해 소개해 드리려 합니다.

  

2013/08/18 - [programming language/MATLAB] - MATLAB 모든 경우의 수 뽑기 Cartesian Product


2013/08/18 - [programming language/powershell] - Powershell 경우의 수 조합 다 구하기(Cartesian Product)

 

아래 주소를 보니 Cartesian Product 와 관련하여 좋은 예제들이 많이 있더군요.

 

http://stackoverflow.com/questions/5279051/how-can-i-create-cartesian-product-of-vector-of-vectors

 

그 중에서 저는 가장 간단해 보이는 anumi 라는 분의 코드를 가져다 사용했습니다.

 

물론 template 형태로 약간 수정만 했습니다.

 

코드를 보다 보니 vector 의 swap 함수를 사용했더군요. Swap 함수는 말 그대로 벡터간에 값을 교환하는 겁니다.

 

Vector 의 Swap 에 대한 설명은 아래 주소 참조바랍니다.

 

http://www.cplusplus.com/reference/vector/vector/swap/

 

요즘 C++ STL 은 정말 좋은 것 같습니다.

 

결과적으로 작성된 cartesian.h 파일은 아래와 같습니다. 

  

cartesian.h


#include <vector>

 

using namespace std;

 

template<typename T>

vector<vector<T>> cart_product (const vector<vector<T>>& v) {

vector<vector<T>> s = {{}};

for (auto& u : v) {

vector<vector<T>> r;

for (auto& x : s) {

for (auto y : u) {

r.push_back(x);

r.back().push_back(y);

}

}

s.swap(r);

}

return s;

}

 

테스트를 위한 main.cpp 파일은 아래와 같이 작성했습니다.

 

#include <iostream>

#include "cartesian.h"

 

using namespace std;

 

int main()

{

    vector<vector<int>> test{{1,2, 56 ,3}, {4,5,6}, {12,32,56}};

    vector<vector<int>> cartprodResult; // result

 

    cartprodResult=cart_product(test); // Cartesian Product

 

    int cnt=0;

 

    for (auto& x : cartprodResult)

    {

        ++cnt;

        cout << cnt << ": \t";

 

        for (auto y : x)

        {

            cout << y << "\t";

        }

        cout << endl;

    }

 

    return 0;

}

 

Cartesian product 를 수행해보면 아래와 같이 결과가 나오는 것을 확인 할 수 있습니다. 간단하죠~ 현재 컴파일러는 gcc (tdm64-2) 4.8.1 이고~ C++11 Compiler Flag를 On 했습니다.



C++ 프로그래밍을 하다 보면 변수의 type 에 따라 함수를 여러 개 작성해야 되는 경우가 많이 있다.

다음과 같이 x3 을 계산을 하는 myfunc() 함수를 가정 해 보자.

위 식에서 x 라는 변수가 int, double 인 경우에 대해 함수를 작성 하면 아래와 같이 될 것이다.

 

  • x 가 integer 인 경우

int myfunc(int x)

{

int t0;

t0 = x*x*x;

return t0;

}

 

  • x 가 double 인 경우

double myfunc(double x)

{

double t0;

t0 = x*x*x;

return t0;

}

 

함수는 오버로딩이 되므로 위와 같이 두 개의 함수를 지정해 놓으면 x 가 int 인 경우나 double 인 경우는 함수가 정상적으로 call 이 되고 동작을 하게 될 것이다.

그런데 저런 똑 같은 함수를 float 와 같은 다른 형태의 변수에 대해서도 써야 할 때가 있다.

이런 경우는 물론 그냥 float 형태로 또 써주면 되긴 할 것이다.

하지만 이러한 코딩 방식은 너무나 비생산 적이다.

이런 경우 template 을 알고 있으면 굉장히 편리 하다.

 

다음과 같이 template 의 형태로 함수를 작성해 보자.

template<typename T>

T myfunc(T x)

{

T t0;

t0 = x*x*x;

return t0;

}

 

위 코드에서 double , int 등으로 작성되었던 부분을 T 라는 타입으로 설정 해주고, 그 위에 T 라는 type 을 갖는 template 이다 라고 선언해 준 것 뿐이다.

이렇게 헤더 파일에 작성을 하면

그 myfunc() 라는 함수는 x 의 타입에 상관없이 이용할 수 있는 함수가 되는 것이다.

template 을 이용하면서 주의 할 점은 꼭 헤더 파일에 놓여야 한다는 것이다.

template 으로 작성된 함수는 컴파일시에 코드가 만들어 진다. 따라서 컴파일 속도가 약간 느려질 수는 있지만 그 영향은 거의 미미하다.

 

template 을 사용하여 지루하기만 했던 C++ 코딩에 날개를 달아보자.

 


+ Recent posts