Java로 작성한 패턴 코드를 Python으로 짜보자!
그 전에 오늘 알게 된 정보 정리
(1) python에서 함수 이름을 만들 때에는 대문자를 넣지 않는다.
(2) string 표현을 무조건 ""으로 하지 않는다 ''으로 하는 경우와 ""으로 하는 경우 둘 다 string으로 취급을 받을 수 있다. 이것에 대한 정보는 좀 더 조사해서 정리하는 것으로 한다.
(3) import A와 from test import A는 다르다.
예를 들면 import A를 쓴 경우에는 A를 쓰려고 한다-하면 test.A()이라고 명시를 해줘야 하는 반면에
from test import A라고 쓴 경우에는 같은 파일안에서 쓰듯이 바로 A()로 쓸 수 있다.
전체적 구성은 다음과 같이 UML을 그려볼 수 있다.
자, 이제부터 java와 python의 소스를 같이 보자.
먼저, 파일의 구조는 다음과 같이 구성된다. 물론 python도 여러 파일로 나눠서 하는 것이 좀 더 좋을 수 있지만,
일단 한 파일안에서 모든 클래스를 구현해서 진행시켰다. |
python
State.java
Gumball.py
python에서 interface클래스는 어떻게 구현하는걸까?
일단, 현재 찾아본 바로는 2가지 방법이 있는 것 같다.
(1) 위와 같이 class를 만들고 함수내부를 pass로 채워서 직접적인 구현은 구현 클래스에서 진행 시키는 방법
(2) ABCMeta를 이용하는 방법, (참조 : https://docs.python.org/2/library/abc.html)
여기서 register를 이용해서 관계를 등록하고 Foo() class를 MyIterable에서 구현하고 있다.
Foo() interface를 MyIterable에서 구현하고 있는 것이다.
SoldState.java
Gumball.py
가장 오랫동안 고민했던 부분은 GumballMachine gm;을 생성하지 않고 부르는 것.
그러니까 gm의 생성자를 부르지 않고 위 처럼 어떻게 python에서 참조를 할까?를 고민했었다.
이는 init을 보면 알 수 있듯 단순히 gm하고만 명명하고 있다. gm이 어떤 타입인지 모르는 상태에서 참조가 가능하다는 것을 알 수 있다. 처음에는 상당히 혼란스러울 수 있다.
SoldOutState.java
NoQuarterState.java
Gumball.py
HasQuarterState.java
Gumball.py
GumballMachine.java
Gumball.py java에 toString()이 있다면 python에서는 __str__을 이용할 수 있다.
두 함수의 중요한 점은 gm.toString(), gm.__str__()이런 식으로 부르는 것이 아니라
그냥 객체 자체를 print하면 toString()의 문장을 출력해준다.
따라서 print gm, System.out.println(gm)으로 객체 자체를 출력해주면 된다.
GumballMachineTestDrive.java
Gumball.py
소스가 필요하신 분이 있을까봐 소스도 첨부합니다.
python java
댓글 없음:
댓글 쓰기