본문 바로가기

Development

[Android] Android 4.4 Kit Kat 이번에 Andorid 4.4에 대한 발표?? 가 있어서 홈페이지에 접속해보았다. 이떄까지의 Andoird 역사를 보여주고 마지막엔Kit Kat이 나왔다~!! 키라임파이에서 바뀌어진 코드명? 의견이 분분하지만 난 이렇게 특정 과자 이름으로 발표를 하는걸 보면 그 만큼 자신감이 있다라는 이야기가 아닐까? 라는 생각이 든다. 더보기
[Refactoring] 객체를 통째로 전달 객체에서 가져온 여러값을 메서드 호출에서 매개변수로 전달 할땐 그 객체를 통째로 전달하게 수정하자 void setFrame (int x, int y, int width, int height); 를 Rect라는 클래스를 만들어서 void setFrame (Rect rect); 위와 같이 바꾸자 장점은 코드 가독성 증가 및 새로운 값 전달시 편의성 증대가 있다 하지만 단점으로는 객체를 전달하기에 많은 값을 전달하지 않는 경우에는 하지 않는 것이 좋고 값을 전달할 때 호출되는 객체가 그 값들에 의존하게 되지만 값이 추출된 객체에는 의존하지 않게 된다는 점이다. 통 객체를 전달하게 되면 서로 의존하게 된다. 이것은 의존성 구조를 망가뜨릴 것 같으면 실시하지 않는 것이 좋다. 더보기
[Spring framework] url parameters 받는 방법 @RequestMapping (value = "/postLike/{postId}", method = RequestMethod.GET) public void postPostLike (@RequestParam(value = "testId", required = true) String testId, @PathVariable(value = "postId") final int postId ) { }//end postPostLike Method @RequestParam는 Url에서 Parameter의 값을 가져오는 것이고 @PathVariable는 @RequestMapping에서 value값을 보면 {postId} 여기 이 값을 가져온다. php를 하면서 @RequestParam과 같이 url에 parameter를.. 더보기
[Refactoring] 매개변수를 메서드로 전환 매개변수로 전달된 값에 따라 메서드가 다른 코드로 실행할땐 그 매개변수로 전달될 수 있는 모든 값에 대응하는 메서드를 각각 작성하자. void setValue (String name, int value) { if (name.equals("height")) {_height = value;return;} if (name.equals("width")) {_width = value;return;}Assert.shouldNeverReachHere(); } 위의 코드를 아래로 변환시킨다. void setHeight (int value) {_height = value;} void setWidth (int arg) {_width = arg;} 이렇게 만들면 조건문이 없어지기 때문에 코드가 간결해지고 컴파일 할때 검사가.. 더보기
[Refactoring] 메서드를 매개변수로 전환 기능은 비슷하지만 몇 가지 값에 따라 결과가 달라지는 메서드가 있을때 각 메서드를 전달된 매개변수에 따라 다른작업을 처리하는 하나의 메서드로 만들면 편리하다. class Employee { void tenPercentRaise () {salary *= 1.1;} void fivePercentRaise () {salary *= 1.05;} } 위의 함수들을 void raise (double factor) {salary *= (1 + factor);} 이와 같이 고치면 된다. 더보기
[Refactoring] 상태 변경 메서드와 값 반환 메서드를 분리 부작용이 있는 메서드와 부작용이 없는 메서드의 차이를 명확히 분간하는 것이 좋다. 값을 반환하는 모든 메서드는 눈에 띄는 부작용이 없어야 한다라는 규칙을 따르는 것이 좋다. getTotalOutstandingAndSetReadyForSummaries -> getTotalOutstandingsetReadyForSummaries 병행 처리 문제멀티스레딩 시스템에서 작업하는 살마은 테스트와 설정 연산 수행을 한번에 실시하는 것이 중요함을 알고 있다. 이런 경우에는 두 기능을 모두 수행하는 제 3의 메소드를 두어야한다. 질의 겸 상태 변경 메서드는 질의 메서드와 성태변경 메서드를 호출하고 동기화를 한다. 만약 동기화 하지 않는 다면 privatet 수준으로 제한해야 한다. 그렇게 하면 두 개의 이해하기 위운 메.. 더보기
[Refactoring] 메소드명 변경 코드는 컴퓨터보다 인간이 알아보기 쉽게 작성해야 한다. 인간이 알아보기 쉬우려면 코드에 사용된 모든 이름이 적절해야한다. public String getTelephoneNumber () {return ("(" + _officeAreaCode + ") " + _officeNumber);}위의 코드를 class Person { public String getTelephoneNumber () {return getOfficeTelephoneNumber();} public String getOfficeTelephoneNumber () {return ( + "(" + _officeAreaCode + ") " + _officeNumber);} } 위와 같이 변경한 후 호출되는 부분을 새 메서드로 바꾸자~! ps. 요.. 더보기
[cocos2d-x] CCLayer 또는 CCSprite clipping하기 draw 함수에서 아래와 같이 사용하면 된다.따로 kmGLPushMatrix(), kmGLPopMatrix()를 호출 하지 않아도 된다. glEnable(GL_SCISSOR_TEST); CCEGLView::sharedOpenGLView().setScissorInPoints(clippingRegion.origin.x + getPosition().x, clippingRegion.origin.y + getPosition().y, clippingRegion.size.width, clippingRegion.size.height); CCNode::visit();glDisable(GL_SCISSOR_TEST);[출처] cocos2d-x 레이어 클리핑 시키기|작성자 김아키라 더보기
[Refactoring] Null 검사를 Null 객체에 위임 하자 이 방법은 Null 검사를 자주 하게 될 때 유용한다. if (object == null)result = 0;else result object.getResult(); 위와 같은 코드를 Null객체를 구현함으로써 한줄로 표현된다. 슈퍼 클래스class Object {abstract int getResult();} Null 클래스class NullObject extends Object { int getResult() {return 0;}} 객체 생성시 Null 일 경우 NullObject로 만들어준다 그렇게 되면 위의 예제 코드는 다음과 같이 바꿀수 있다. result = object.getResult(); 위의 예제 말고도 set을 하는 함수에도 활용 할 수 있다. 이 방법은 Null이라는 예외도 클래스로.. 더보기
[Refactoring] 조건문을 재정의로 전환 객체 타입에 따라 다른 기능을 실행하는 조건문이 있을 땐 조건문의 각 절을 하위클래스의 재정의 메소드 안으로 옮기고 원본 abstract 타입으로 수정하자. switch (type) {case type1 :return 1;case type2 :return 2; } 위와 같이 되어진 구문의 경우 상황에 따라 다를 수 있지만 다형성을 이용하면 좋을 것 같다. 디자인 패턴에서 Strategy 패턴 처럼.. 추상 클래스abstract class type {abstract int result();} 구현 클래스class type1 extends type {int result () {return 1;}} class type2 extends type {int result () {return 2;}} 이와 같이 클래스.. 더보기