My-Book(History)
-
자바로 배우는 쉬운 자료구조 - 수식의 후위 표기법 변환My-Book(History) 2016. 5. 5. 22:29
연산자와 피연산자로 구성된 수식을 표기하는 방법은 연산자의 위치에 따라 다음의 세 가지 표기법이 있다. (1) 전위 표기법(Prefix Notation) : 연산자를 앞에 표기하고 그다음에 피연산자를 표기하는 방법(+AB)(2) 중위 표기법(Infix Notaion) : 연산자를 피연산자의 가운데에 표기하는 방법(A+B)(3) 후위 표기법(Postfix Notaion) : 연산자를 피연산자 뒤에 표기하는 방법(AB+) 다음 수식을 전위 표기법으로 변환해보자A*B-C/D(1) 수식의 각 연산자에 대해서 우선순위에 따라 괄호를 사용하여 다시 표현한다. -> ((A*B)-(C/D))(2) 각 연산자를 그에 대응하는 왼쪽 괄호의 앞으로 이동시킨다.-> -(*(AB)/(CD))(3) 괄호를 제거한다.-> -*AB..
-
좋은 코드를 작성하는 기술 - 코드의 분할My-Book(History) 2016. 4. 16. 18:33
오랫만에 책을 기반으로 공부를하면서 글을 올리네... 단지 이 게시글에서는 새롭게 알게된 방식을 메모해 두기 위해 작성을 하였다 '상태를 나타내는 로컬 변수'는 우선 그 처리 자체를 클래스로 추출한다.그다음에 '상태를 나타내는 로컬 변수'를 필드 변수로 이동함으로써 메소드 간 상태의 인계를 제거할 수 있게 되어 나중에 리팩토링을 실행하기가 쉬어진다. 코딩을 예로들어 따로 정리하지 않을 생각이다. 하나 배워간다는 심정으로 작성하기 때문인데, 책에서 말하는 '상태를 나타내는 로컬 변수'는 로컬 변수가 특정 메소드나 플래그에 의해 값이 변경된것을 의미한다. 마지막으로 내가 느낀점은 항상 클래스를 따로 만들어서 처리할려고만 생각했던 시각을 변화시켜준 계기가 된거 같다...
-
[Effective Java 2/E] 규칙49 객체화된 기본 자료형 대신 기본 자료형을 이용하라My-Book(History) 2016. 2. 28. 20:24
기본 자료형과 객체화된 기본 자료형 세가지 큰 차이점 1) 기본 자료형은 값만 가지지만 객체화된 기본 자료형은 값 외에도 신원(identity)을 가진다는 것이다. 따라서 객체화된 기본 자료형 객체가 두 개 있을때, 그 값은 같더라도 신원은 다를 수 있다. 2) 기본 자료형에 저장되는 값은 전부 기능적으로 완전한 값 이지만, 객체화된 기본 자료형에 저장되는 값에는 그 이외에도 아무 기능도 없는 값, 즉 null이 하나 있다는 것이다. 책을 읽으면서 알게된 중요한 Tip 1) 객체화된 기본 자료형에 == 연산자를 사용하는 것은 거의 항상 오류라고 봐야한다. 2) 기본 자료형과 객체화된 기본 자료형을 한 연산 안에 엮어 놓으면 객체화된 기본 자료형은 자동으로 기본 자료형으로 변환된다.(내 생각 : Auto-..
-
[Effective Java 2/E] 규칙43 null 대신 빈 배열이나 컬렉션을 반환하라My-Book(History) 2016. 2. 28. 20:05
Cheese[] cheeses = shop.getCheeses();if(cheeses != null && Arrays.asList(cheeses).contains(Cheese.STILTON))System.out.println("jolly good , just the thing."); null이 반환되지 않는다면 아래와 같이 할 수 있었을 것이다. if(Arrays.asList(cheeses).contains(Cheese.STILTON))System.out.println("jolly good , just the thing."); 빈 배열이나 컬렉션을 반환하는 대신 null을 반환하는 메서드를 사용하면 이런 상황을 겪게 된다.이런 메서드는 오류를 쉽게 유발한다. 클라이언트가 null 처리를 잊어버릴 수 있기..
-
[Effective Java 2/E] 규칙42 varargs는 신중히 사용하라My-Book(History) 2016. 2. 28. 19:53
자바 1.5부터 가변 인자 메서드라고 부르는 varargs메서드가 추가되었다. 동작원리 : 클라이언트에서 전달한 인자수에 맞는 배열이 자동 생성 -> 모든 인자가 해당 배열에 대입 -> 마지막으로 해당 배열이 메서드에 인자로 전달 varargs는 임의 개수의 인자를 처리하는 메서드를 만들어야 할 때 효과적이다 (해당 위 내용을 내가 이해한대로 작성한 내용 : 해당 인자를 필요에 따라 사용하지 않는것이 아닌 반드시 사용할 수 있도록 설계할것!!)
-
[Effective Java 2/E] 규칙2 생성자 인자가 많을 때는 Builder 패턴 적용을 고려하라My-Book(History) 2016. 2. 20. 22:25
1.텔레스코핑 패턴Telescoping Constructor Pattern- 필수 인자만 받는 생성자를 하나 정의하고, 선택적 인자를 받는 생성자를 추가하는패턴을 의미한다 ex)public class Telescoping {private String name;private int age; public Telescoping (String name, int age ) { this.name = name;this.age = age; }} 텔레스코핑 패턴은 잘 동작하지만 인자 수가 늘어나면 클라이언트 코드를 작성하기가 어려워지고 무엇보다 읽기 어려운 코드가 되고 만다. 2.자바빈 패턴 - 인자 없는 생성자를 호출하여 객체부터 만든 다음, setter 메소드 들을 호출하여 필수 필드뿐 아니라 선택적 필드의 값들까지..
-
[리팩토링] 메소드 인수를 조절한다.My-Book(History) 2015. 6. 27. 19:34
1. 인수의 삭제문제 : 메소드의 내부에서 사용하고 있지 않는 인수가 있다. 해법 : 사용하지 않는 인수를 삭제하자! 2. 인수의 추가문제 : 메소드에 필요한 정보가 부족하다.해법 : 인수를 증가시켜 필요한 정보를 전달하자주의 : 단지 인수를 증가시켜서는 안된다. 너무 증가해야 될 듯싶으면 인수 오브젝트의 도입을 검토하자 3. 인수를 명시적 메소드군으로 치환문제 : 인수의 특정 값에 대해 실행되는 코드가 분리되어 있다.해법 : 특정 값마다 전용의 메소드를 만들자주의 : 메소드의 수를 증가시키는 대신에 인수의 수를 줄인다. ex) 변경전void setBuffer (char name, char[] buffer) {if(name== 'R') {_readBuffer = buffer;} else if(name==..
-
[리팩토링] 조건문 쪼개기 & 매개변수My-Book(History) 2015. 6. 13. 19:59
if를 피하고 싶다면 아래 참조 http://redutan.github.io/2016/03/31/anti-oop-if 1. 중복 조건식 통합 : 여러 조건 검사식의 결과가 같을 땐 하나의 조건문으로 합친 후 메서드로 빼내자.예제)double disablityAmount() {if (_seniority 12) return 0;if (_isPartTime) return 0;}▼double disabilityAmount() {if (isNotEligableForDisability()) return 0;} bollean isNotEligableForDisability() {return ((_seniority 12) || (_isPartTime))}..