[문제]


코드를 재사용 하는 방법중에서 속도로 가장 빠른 방법은 소스 복붙입니다.


또, 전역 변수를 많이 사용하게 되면, 유지보수가 굉장히 힘든 코드가 될 수 있습니다.


프로그래머들은 유지 보수가 쉬운 방법을 연구하게 되었고, 코드 구조의 더 나은 인터페이스가 필요하고, 전역변수의 효율적인 사용이 필요하는 것을 깨달았습니다.


[해법]


Accessor 패턴은 객체에서 데이터를 가지고 오거나 객체 내부의 변수를 설정해 조작 할수 있는 몇가지 방법중 한가지 입니다.


Class를 사용하는 사용자에게 미리 정의된 Method를 제공함으로써 데이터를 Input Output 하는 확실한 방법을 제공합니다.


결국은 잘 설계된 접근자 Method는 깔끔하고 안전한 인터페이스를 만들수 있어요~


[설명]


객체는 하나의 책임을 가지고, 내부로직을 외부에 공개할 필요가 없습니다. 이것은 "캡슐화"로 알려진 객체지향 프로그래밍 입니다.


인터페이스는 클래스가 제공하는 외부로 보여지는 변수정도로 생각하면 될것 같습니다.


프로그래머는 클래스 자신이 내부에 접근하는것은 막을 수가 없지만, 외부에서 클래스 내부로 직접적으로 접근 할수 없도록 하는것이 목표입니다.


아래의 방법은 소프트웨어의 손상을 최소화 시켜줍니다.


1. 주어진 데이터의 유효성 확인

2. 객체의 내부상태 업데이트

3. 객체의 업데이트를 다른 객체에게 알리기

4. 외부 코드를 수정하지 않고 내부코드의 수정을 가능하도록


[1]. Perl이 아닌 많은 엄격한 객체 지향 언어에서는 접근자를 설정하기 위해서 중복된 코드가 많이 필요합니다.


예를들자면, 

get_name , set_name , get_age , set_age , set_id , get_id 

보자면 굉장히 비효율 적일 수 있는 방법입니다.


이것을 Perl에서는 굉장히 간단한 방법으로 구현할 수 있습니다.


foreach my $i (qw(name price quantity)) {
    my $field = $i;
    *{"get_$field"} = sub {
      my $me = shift;
      return $me->{$field};
    };
    *{"set_$field"} = sub {
      my $me = shift;
      @_ or die "not enough arguments to set_$field, stopped";
      $me->{$field} = shift;
      return 1;
     };
  }


qw 안에 있는 name과 price와 quantity를 봐주세요.


위 코드는 변수의 현재 상태가 바인딩 되는 익명 함수를 구현하였습니다.


[2]. 또하나의 방법은 객체 내부로 직접 들어가 데이터에 엑세스 하는 방법입니다.


$stock->{'price'} *= 2;

  # Rather than the more OO:

  $stock->set_price($stock->get_price() * 2);


추천 드리지 않는 코드 방식입니다.


직접 객체지향적인 코드와 객체지향 적이지 않는 코드를 소개합니다.


[객체지향]


 $foo->query_ob()->add($baz->query_qux());

오직 ->만 쓰인것을 볼 수 있습니다. 이것을 객체지향적이 아닌 코드와 비교하면


[객체지향 아님]


  $foo{ob}->{bar} += $baz{qux};


  $foo{ob}->{bar} += $baz{qux};


기본적으로 계산이나 어떤 작업을 수행하려는 모든 것들을 변수로 가져와서 작업을 수행한 뒤에 접근자를 사용하여 이 값을 속하는 위치에 저장시키는 것이 좋은 방법입니다.








Posted by C마노
,

[Python]pywin32 설치기.

Python 2016. 12. 15. 13:07

pywin32를 쓸일이 있어서 사용하게 되었는데

설치가 정상적으로 되지 않았다.


왜냐하면 파이썬 dir 을 나는 Custom 하게 설정하였는데


reg값이 바뀌지 않았기 때문이다.


해결방법은


regedit.exe 들어가서


HKEY_CURRENT_USER 에 들어가준다.


거기안에 Software에 들어가면 python이 있고 하위에 python-core가 있다 

안에보면 3.5-32 가 있으면 3.5로 바꾸어주고 (만약 3.5라고 되어있으면 상관없다)


저런식으로 바꾸면 안된다.. 35-32면 아래 reg 등록할때 3.5=>3.5-32로 바꾸어주어야한다.


autoReg.reg 파일을 만든후 아래와 같이 타이핑후 저장한다.


Windows Registry Editor Version 5.00


[HKEY_CURRENT_USER\SOFTWARE\Python]


[HKEY_CURRENT_USER\SOFTWARE\Python\PyLauncher]

"InstallDir"="C:\\Windows\\"

"AssociateFiles"=dword:00000001

@="C:\\Windows\\py.exe"


[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore]


[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.5]


[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.5\Help]


[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.5\Help\Main Python Documentation]

@="C:\\Python35\\Doc\\python350.chm"


[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.5\Idle]

@="C:\\Python35\\Lib\\idlelib\\idle.pyw"


[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.5\IdleShortcuts]

@=dword:00000001


[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.5\InstalledFeatures]

"dev"="3.5.150.0"

"Shortcuts"="3.5.150.0"

"exe"="3.5.150.0"

"lib"="3.5.150.0"

"test"="3.5.150.0"

"doc_shortcut"="3.5.150.0"

"doc"="3.5.150.0"

"tools"="3.5.150.0"

"tcltk"="3.5.150.0"

"pip"="3.5.150.0"

"path"="3.5.150.0"


[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.5\InstallPath]

@="C:\\Python35\\"

"ExecutablePath"="C:\\Python35\\python.exe"


[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.5\InstallPath\InstallGroup]

@="Python 3.5"


[HKEY_CURRENT_USER\SOFTWARE\Python\PythonCore\3.5\PythonPath]

@="C:\\Python35\\Lib\\;C:\\Python35\\DLLs\\



python 경로 확인후.

그후 세이브후 실행하면 끝.



'Python' 카테고리의 다른 글

[Flask] Flask - wsgi - nginx 연동.  (0) 2017.05.15
[Python] YAPF  (0) 2017.03.11
[Python] python getter setter  (0) 2017.02.16
[Python] 공부해야 할 것.  (0) 2017.02.15
python vim설정  (0) 2016.12.05
Posted by C마노
,

python vim설정

Python 2016. 12. 5. 15:36

python을 쓰다 보니 윈도우에서 안되는 것이 있다.


sasl이 설치가 안돼서.. 아직 하는 방법을 찾지 못했다...


그래서 결국은 리눅스에서 코딩을 해야 하는 사태가....


그런데 리눅스에서 코딩을 할려고 보니 여간 불편한게 아니다..쩝..


다 따져봐도 결국은 vim을 써야 하는 상황...


vim을 잘 쓰는 사람들은 외국에서 코딩 닌자라고 불린다고 하던데.. 이참에 vim을 쓸 수 있도록 연습겸 써봐야 겠다.


일단 우선적으로 설정해야 할 것을 정리해 보자!


</home/사용자 폴더 .vimrc 파일 수정>

  vim 설정 파일이라고 보면 됨!

  없으면 만들어 주자!

 

  Write to .vimrc

  syntax on                          ----------> 문법 기능 ON

  filetype indent plugin on            ----------> 확장자로 문서 형식 파악

  let python_version_2 = 1             ----------> python 2 문법을 따름(플러그 인)

  let python_highlight_all = 1          ----------> 모든 강조(색상) ON(플러그 인)

  set tabstop = 8                     ----------> 탭의 길이 설정

  set expandtab

  set softtabstop = 4                  ----------> 탭을 누를 때 실제로 벌어지는 간격

  set autoindent                      ----------> 자동 들여쓰기

  set bg=dark                       -----------> 배경을 어둡게(필수!) 가독성이 좋아짐

  set nu                             ----------> 라인 숫자 ON

  일단 기본적인 셋팅은 이렇게 하면 된다!


하지만 python 코딩하기에는 아직도 많이 부족하다고 보고 

  

http://www.vim.org/scripts/script.php?script_id=790

여기로 가서 자신의 python 버젼에 맞는 python.vim을 다운 받는다.


그리고 ~/.vim/syntax/에 저장!


www.vim.org/ 에 가면 다양한 vim 설정 관련된 파일과 정보를 얻을 수 있다!


그리고 자동 완성기능도 가능하다!


<python 자동 완성 기능>

http://www.vim.org/scripts/script.php?script_id=850

1. 위 사이트로 가서 최신 pydiction-x.x.zip 다운

2. .vim/ 폴더 안에 압축 해제(python_pydiction.vim, complete_dict, pydicttion.py 확인)

3. python_pydiction.vim => ~/.vim/after/ftplugin/ (폴더가 없을 경우 생성)

4. .vimrc 파일 수정

   => filetype plugin on 추가

   => let g:pydiction_location='/home/사용자폴더/.vim/pydiction-1.2/complete-dict' 추가


하면 끝!

vim에서 이제 Tab를 누르면 자동 완성 글자들이 뜬다!!


참조 사이트 : http://pumaya.tistory.com/91, http://daymoon92.egloos.com/9347310

'Python' 카테고리의 다른 글

[Flask] Flask - wsgi - nginx 연동.  (0) 2017.05.15
[Python] YAPF  (0) 2017.03.11
[Python] python getter setter  (0) 2017.02.16
[Python] 공부해야 할 것.  (0) 2017.02.15
[Python]pywin32 설치기.  (0) 2016.12.15
Posted by C마노
,