개인적인 용도를 위한 간단한 요약.
다음과 같은 유틸리티를 사용해볼 수 있다.
-
다중 클립보드 유틸리티
-
pushd 와 popd (디렉토리를 빠르게 오갈 수 있게 한다.
-
wsl을 이용한 리눅스 명령줄 도구 사용
-
find, grep, sed 같은 명령줄 도구들
-
wget, curl, selenium 같은 웹 자동화 도구들
-
쉘 스크립트
-
다양한 단축키를 외워두자. 예를 들어 줄 복제나 몇 번 줄으로 가기 같은 것들.
-
Unity3D라고 하더라도 CI는 가능할 것이다.
-
명령줄 주석과 커밋에서 자동으로 생성되는 문서. 생각만 해도 아름답다.
-
단위 테스트를 통해 코드를 아름답고 깔끔하게 만들기. 메소드를 작은 메소드들로 분할하고, 논리적으로 나열하는 쪽이 버그 잡기에 쉽다. 메소드의 응집성이 높아 재사용도 편리하다.
-
클래스의 프로퍼티를 get() set() 을 이용해서 직접 건드리는 것을 지양하자. 대신 내가 시키고 싶은 일을 하는 메소드를 새로 만들자. bad:
monster.setHP(monster.getHP - (damage - monster.getAttributes(Attribute.SHIELD))); \\ if (monster.getHP <= 0) { // kill code};
good:monster.damage(damage);
-
생성자도 필요한 정보를 한 번에 넣어야만 생성이 되게 만들자. null 프로퍼티를 넣는 것은 재앙을 초래하는 일이 될 수 있으며 null 처리는 번거롭다.
-
싱글톤 패턴을 지양하자. 대신 팩토리 같은 패턴을 사용하자.
-
YAGNI. 당장 필요 없는 기능(멀티플레이어, 세이브/로드, 기타 거창한 기능들)은 나중에 생각하자. 일단 필요한 기능부터 만들자.
-
디미터의 법칙. 어느 개체나 메소드를 막론하고, 다음 메소드만 호출해야 한다.
- 개체 자신의 메소드
- 매개 변수로 넘어온 개체의 메소드
- 메소드 내 생성 개체의 메소드 말하자면, 메소드 호출 시 하나 이상의 점은 쓰지 말자고 할 수 있다. 클래스 간의 결합도를 낮출 수 있다.
-
유창한 인터페이스. 가독성 좋은 람다식을 활용해보자. 다시 말해, LINQ를 두려워하지 말자. iOS에도 (아마) 잘 돌아가는 것으로 알고 있다.
-
setSomething() 류의 메소드가 인스턴스 자신을 리턴하게 만들어 메소드 구현을 이어나갈 수 있게 하는(Method-chaining) 기법.
-
메타 프로그래밍????
-
컴포즈드 메소드. public 메소드는 수행 절차 개요처럼 읽히게 작성하고, 실제 절자는 private 메소드에서 돌아가도록 한다. 메소드 길이가 15줄을 넘어가게 하지 말라는 지침.
public void doSomething(){ first(); second(); third();}
private void first() { var that = this.getSomething(); that.chop().dice(); for(var i in that) {blah(i);}}
- 메소드 내 모든 코드가 같은 수준의 추상화 수준을 가지도록 한다.
- 정규식 검색 기능과 매크로를 지원하는 텍스트 편집기.