안드로이드 스튜디오의 시대


안드로이드 스튜디오가 이클립스를 대신하여 안드로이드의 공식 개발 툴이 된지도 벌써 2년이 지났습니다. 아주 오래된 레거시 프로젝트를 제외하고는 거의 대부분 프로젝트가 안드로이드 스튜디오로 개발되는 시대입니다.



안드로이드 스튜디오의 플러그인


이클립스에서는 수많은 플러그인을 입맛대로 골라쓸 수 있어 굉장히 편리했습니다. 서버 개발자들도 이클립스를 많이 썼기 때문에, 이들이 플러그인을 많이 만들어서 올렸고 안드로이드 개발자들도 그 혜택을 누릴 수 있었습니다.


다행스럽게도 안드로이드 스튜디오, 정확하게는 Intelli J 도 플러그인을 지원합니다. 그리고 유용한 플러그인도 꽤 많습니다.


그 중 특히 더 유용한 플러그인을 한 번 모아보았습니다.



플러그인 설치 방법


먼저 안드로이드 스튜디오 - Preference를 선택합니다. (OS X에서 캡쳐했지만, 다른 OS도 유사합니다.)





그리고 좌측 탭에서 Plugins 를 선택하면, 플러그인을 설치할 수 있는 화면이 나옵니다.


하단의 "Install JetBrains plugin" 을 선택하면, 공식 플러그인 목록 중에 원하는 플러그인을 설치할 수 있고, "Browse repositiories"를 선택하면, 사람들이 만들어서 올린 플러그인 목록 중에 원하는 플러그인을 설치할 수 있습니다. 그리고 "Install plugin from disk"는 설치파일 형태의 플러그인을 설치할 때 쓰는 메뉴입니다.









1. Android wifi adb

노트북에서 쓸 수 있는 플러그인으로, USB 케이블을 뽑아도 노트북과 폰을 계속 연결시켜 놓을 수 있는 플러그인입니다. (안드로이드 스튜디오 실행 후 한 번은 USB 케이블로 직접 폰을 연결시켜야 합니다)


검색 키워드: Android wifi adb


https://plugins.jetbrains.com/plugin/7983




설치하면, 우측 탭에 추가로 표시됩니다. 탭을 클릭하면 접속 가능한 단말이 표시됩니다.

먼저 폰과  USB 케이블로 노트북을 연결하고, 화면에서 원하는 단말에 Connect를 누르면 접속이 되며, 이후 USB 케이블을 뽑아도 앱 설치나 디버그 등 adb 명령어가 동작하게 됩니다. 






2. QAPlug - FindBugs

이클립스에서 많이 쓰던, FindBugs입니다. QAPlug 라는 이름의 플러그인에서 지원을 하고 있네요. 이것 외에도, QAPlug-PMD라는 툴도 유용합니다.


코드 분석을 통해 잠재적 버그를 도출해 주는 툴입니다. 설치 후, 상단메뉴의 Analyze를 실행하거나, 좌측 프로젝트 트리에서 개별 파일에서 우클릭 후 Analyze를 할 수 있습니다.


검색 키워드: QAPlug

https://plugins.jetbrains.com/plugin/4594










3. Code Iris

이 플러그인은 Code Iris 사이트에서 파일을 다운로드 받아 Install plugin from disk 형태로 설치해야 합니다. 


코드를 Visualize 해주는 툴인데요, 각 클래스 간의 호출관계를 그림으로 그려주기 때문에 코드를 이해하는데 도움을 줍니다. 다만 프로젝트가 굉장히 크다면, 꽤 큰 모니터가 필요할겁니다.


http://www.codeiris.com 에서 다운로드 받을 수 있습니다.









4. Lombok

Getter / Setter를 자동으로 만들어주는 유명한 플러그인이죠.


검색 키워드: Lombok

https://plugins.jetbrains.com/plugin/6317









5. Code glance

우측에 코드의 미니맵을 그려 줍니다.

코드를 많이 보다보면 모양만 봐도 대충 어디 쯤이구나 하는 것이 감이 오기 때문에, 꽤 유용할 때가 있습니다.


검색 키워드: Code glance

https://plugins.jetbrains.com/plugin/7275











6. IdeaVIM

안드로이드 스튜디오의 에디터를 VIM 을 이용하듯 이용할 수 있게 해주는 플러그인입니다.

VIM은 콘솔시절의 커맨드라인 에디터지만, 숙련된 사람들에겐 이만한 툴이 없다는군요.


설치 후, 상단메뉴 Tools - Vim Emulator를 체크하면 VIM 기능이 동작합니다.

체크를 해제하면 VIM이 꺼지고, 그러면 같이 일하는 동료가 그 자리에서 코딩할 수 있게 되겠죠.


검색 키워드: IdeaVIM

https://plugins.jetbrains.com/plugin/164






7. Fast-Scrolling

Ctrl 키를 누르고 스크롤 하면 빠르게 스크롤 되는 기능입니다.

저는 개인적으로 이 기능이 제일 만족도가 높습니다. 이클립스에서는 Ctrl 스크롤을 하면 고속 스크롤이 되어 편했는데, 안드로이드 스튜디오에는 그런 기능이 없었거든요.


검색 키워듸 Fast-scrolling

https://plugins.jetbrains.com/plugin/7573





맺음말


이 외에도 수많은 플러그인이 있습니다. Go 언어, Kotlin 언어 등의 플러그인이나, 다른 시스템과 연동할 수 있는 플러그인이 굉장히 많습니다. 그리고 어떤 기능이 필요한데 플러그인이 없다면, 직접 만드는 것도 가능합니다. 플러그인을 만들고 싶다면, IntelliJ 사이트를 참조하세요.



신고
Posted by StanleyKou





전에 zip 암호를 풀어야 하는 경우가 있어서 john the Ripper라는 프로그램을 이용한 적이 있었습니다.

성능이 꽤 괜찮아서 포스팅도 한 번 했었습니다.


http://stanleykou.tistory.com/entry/ZIP-파일-암호해제-John-the-Ripper



하지만, 커맨드라인으로 뭔가 작업을 한다는 건 귀찮은 일입니다.

john the rippper를 gui로 만들어주는 프로그램을 발견해서, 소개합니다.

써보니 설정만 해 놓으면 간편하고, John the Ripper처럼 속도도 빨라서 8자리 암호 정도는 1초 이내에 풀어내네요.



Johnny - GUI For John the ripper

http://openwall.info/wiki/john/johnny




이 프로그램을 이용하기 위해서는 몇 가지 과정이 필요합니다.



1. John the Ripper를 다운로드


http://www.openwall.com/john/ 이 사이트에 들어가셔서 아래 링크를 클릭해서 다운로드 한 뒤, 적절한 경로에 압축 해제하세요.




2. Jonny를 다운로드한 뒤, 인스톨

http://openwall.info/wiki/john/johnny




3. Jonny 에 John the ripper 경로를 설정


좌측 메뉴 중 Setting을 클릭하고, 가운데 보이는 경로에 아까 압축해제 했던 John the ripper의  John.exe파일의 경로를 입력 해 줍니다.






4. 상단메뉴 Open password file - Open other file format 선택





5. 상세설정을 해줍니다


5-1 Choose file format 에서 Zip 선택


5-2 Save hashes to는 적절한 경로를 선택해서 직접 파일명을 써주면 되는데, 저는 압축파일이 있는 경로에 list.lst 라는 이름으로 생성했습니다.


(예:  아래와 같이 입력해도 됩니다. 

C:\list.lst

이렇게 하면 c 드라이브 최상위 경로에 해시파일이 생성될 것이고, 암호 해독할 때 이 파일을 참조할 것입니다)



5-3 자 그리고 대망의 zip 파일 선택을 합니다.


5-4 그 다음, 맨 아래에 보이는 Convert를 클릭합니다.



여기까지 한 번 입력을 했다면, 다음부터는 5-3에서 zip만 선택하면 되기 때문에 굉장히 간편해집니다.







6.패스워드를 해제


가운데 보이는 Start new attack 버튼을 누르면 zip 암호를 해제하게 됩니다.





7. 결과


써보니 결과가 꽤 놀랍습니다. 제 컴퓨터는 8년 된 i5 750, (그래픽카드는 1050) 인데 

간단한 8자리 암호를 1초 이내에 해독하네요....


이 프로그램이 GPU를 활용하는지는 잘 모르겠습니다만 믿기 힘든 속도입니다.


단, 대소문자가 혼합될 수록, 숫자 추가, 특수문자가 추가될 수록 속도는 기하급수적으로

아니, 지수승으로 느려집니다. 뻥 좀 추가해서, 자리수 하나가 추가되면 시간이 100배는 더 걸리는 것 같네요.




간략하게 테스트를 해봤는데, 아래와 같습니다.


 패스워드 

 걸린 시간 

 abcd

 1초 이내

 abcc1234

 1초 이내

 korea123!

 1초 이내 

 ka36!_6g

 1초 이내

 A!bCd12@

 1초 이내

 A!bCd12@3

 20분 이상 걸리길래 그냥 포기






8. 교훈(?)


패스워드 자릿수가 조금만 길어져도, 푸는 입장에서는 무시무시하게 속도가 더 걸리게 됩니다.

그리고 특수문자나 숫자가 들어가면 더더욱 무시무시한 시간이 걸립니다.


그러니 패스워드는 영문 대문자 소문자, 숫자, 특수문자를 이용해서 만들고, 길게길게 12자리 이상으로 만듭시다.





신고
Posted by StanleyKou





Q: Association, Aggregation, Composition 이 세가지의 차이가 무엇인가요? 구현 시 어떻게 적용되는지 설명 해주세요. (질문자: ???)



A: 
Association: 모든 오브젝트가 각자의 라이프사이클을 가지고 있고, 어떤 오브젝트가 다른 오브젝트를 소유하지는 않은 경우입니다.

예를 들면, 선생님과 학생의 경우를 들 수 있습니다. 많은 학생이 한 선생님에게 Association를 가질 수 있고, 한 학생이 여러 선생님에게 Association를 가질 수도 있습니다. 하지만 이 관계에는 누가 누구를 소유하거나 하지는 않습니다. 각자가 생성/소멸을 독립적으로 합니다.


Aggregation: Association의 특별한 경우인데, 모든 오브젝트가 각자의 라이프사이클을 가지고 있으며, 한 오브젝트가 다른 오브젝트를 소유하고 있는 경우입니다.

선생님이 어떤 부서에 Aggregation되어 있다고 합시다. 소속된 관계이기 때문에, 한 선생님이 여러 부서에 Aggregation될 수는 없습니다. 그렇다고 해서 부서가 소멸될 때 선생님도 소멸되는 것은 아닙니다. 이것을 "has-a" 관계라고 할 수 있습니다.


Composition: Aggregation의 특별한 경우인데, 이것을 "죽음의" 연관관계라고 부를 수도 있습니다. 강력하게 연관된 Aggregation이며, 자식 오브젝트는 자신의 라이프사이클을 가지지 않고, 부모 오브젝트가 소멸될 경우 자식 오브젝트도 함께 소멸됩니다.

이 관계는 집과 그 안의 방 사이의 관계라 할 수 있습니다. 집은 여러 개의 방을 가지고 있고, 방은 절대로 독립적인 라이프사이클을 가질 수 없습니다. 우리가 집을 소멸시키면, 방도 함께 소멸될 것입니다.

또 다른 예로, 문제와 선택지의 관계를 들 수 있습니다. 한 문제는 여러 개의 선택지를 가질 수 있고, 선택지는 여러 문제에 속할 수 없습니다. 문제를 소멸시킬 때, 선택지도 함께 소멸될 것입니다. (역주: 이 예는 틀릴 수도 있습니다. 여러 선택지와 여러 문제가 함께 있을수도 있으니까요!)



(답변자:Varun Gupta)

_


_

What is the difference between association, aggregation and composition? Please explain in terms of implementation.

shareeditflag
_


  • Association is a relationship where all objects have their own lifecycle and there is no owner.

    Let’s take an example of Teacher and Student. Multiple students can associate with single teacher and single student can associate with multiple teachers, but there is no ownership between the objects and both have their own lifecycle. Both can be created and deleted independently.

  • Aggregation is a specialised form of Association where all objects have their own lifecycle, but there is ownership and child objects can not belong to another parent object.

    Let’s take an example of Department and teacher. A single teacher can not belong to multiple departments, but if we delete the department, the teacher object will not be destroyed. We can think about it as a “has-a” relationship.

  • Composition is again specialised form of Aggregation and we can call this as a “death” relationship. It is a strong type of Aggregation. Child object does not have its lifecycle and if parent object is deleted, all child objects will also be deleted.

    Let’s take again an example of relationship between House and Rooms. House can contain multiple rooms - there is no independent life of room and any room can not belong to two different houses. If we delete the house - room will automatically be deleted.

    Let’s take another example relationship between Questions and Options. Single questions can have multiple options and option can not belong to multiple questions. If we delete the questions, options will automatically be deleted.

shareeditflag


신고
Posted by StanleyKou







티스토리 툴바