2014년 2월 14일 금요일

[Android] Major to Minor

우연히 Youtube에서 1박2일 동영상을 보게됐다. 그런데 일반인 참가자 중에
정말 매력적으로 you are my sunshine을 부르는 사람이 있었다.
서울서 제주도 놀러왔다가 두달이나 눌러앉은 여자였는데 성시경 열혈팬이었다.
엄마도 두달째 연락이 잘 안된다는데 성시경한테 날 가지란다 ㅋㅋㅋㅋ

강렬한 인상의 the very 처자



무튼 짧지만 강렬했는데, 불렀던 you are my sunshine은 minor였다. 원래 major인 곡을 minor로 부르니 색다른 매력이 있어서 '그래 그러면 다른 곡도 minor로 바꿔보자'는 단순한 생각에 인터넷에서 major to minor를 검색했다.

안나왔다.

그래서 만들었다. MajorToMinor.
매우 단순하다. Major/Minor 버튼이 있고, Major는 기본 건반, Minor는 일반 건반을 누르면 그에 해당하는 Minor음계가 나온다.

원래는 이랬었는데.. 실상은 C major to C minor다.
조변경이야 그냥 음계 몇칸씩 동시에 내리면 되지만, minor변경은 내려야 하는 음이 온음인지 반음인지 각기 조마다 다르기 때문에 일괄적으로 변경하는게 불가능하다.
다음에 보완해서 각 장조/단조 마다 음이 나게 해볼까 생각도 드는데 다만들고 보니 영
생각보다 쓸모가 없어서 고민중이다.

여튼 나의 앱 처녀작이라는데 의의를 두자.
















만드는 중에 새로 배운 것
- Relative Layout : 왜 쓰나 싶었는데 상대 위치로 view들을 조정할 수 있어서 하나만 제대로 위치를 잡아놓으면 나머지는 굳이 절대 위치를 지정하지 않아도 된다. 그래서 좋다.
- SoundPool Class : SoundPool 클래스는 소리를 출력하는 클래스다.

생성자->load -> play 순으로 쓰인다. 자세한 설명은 귀찮으니
Android Sound 출력 참조

[Android] 안드로이드 RelativeLayout

[출처 jwandroid.tistory.com/158]


1. 형제뷰 기준으로 정렬

해당 element값="@id/기준뷰"



2. 부모뷰 기준으로 정렬

해당 element값="true" or "false"




2014년 2월 13일 목요일

[Effective JAVA] 13. 불변클래스를 써라.

1. 객체를 변경하는 메소드를 제공하지 않는다.
setter금지

2. 재정의 할 수 있는 메소드를 제공하지 않는다.
- 클래스를 final로 재정의해서 상속 자체를 원천 봉쇄한다.
- 모든 메소드를 final로 정의한다.
- 생성자를 private이나 package-private으로 정의하고 public static 팩토리 메소드를 제공한다. (생성자가 private인 경우 상속이 불가능하다. 하지만 package-private으로 작성하면 같은 package내에서는 상속이 가능하다. 원하는 인스턴스를 골라서 리턴할 수도 있다.)

3. 모든 필드를 final로 만든다.

4. 모든 필드를 private으로 만든다. 
Q: 기본 타입이나 불변 객체를 참조하는 public final 필드를 불변 클래스에 둘 수는 있지만, 향후 배포판에서 클래스의 내부 표현을 바꿀 수 없기 때문에 바람직하지 않다.?

5. 가변 객체를 참조하는 필드는 배타적으로 접근해야 한다.(ex 방어복사)
클라이언트가 이 객체에 대한 참조를 얻을 수 없게 해야 한다. 해당 필드를 final로 선언했다 할지라도 해당 필드가 어떤 객체를 참조하는가 하는 사실만 불변(final)이지 참조하는 객체의 내부는 변경할 수 있기 때문이다.

* 방어복사 : 객체를 복사할 때 객체의 참조를 리턴하는 것이 아니라 객체의 복사본을 리턴하는 등의 방법을 통해 객체를 복사하는 방법.

2014년 2월 12일 수요일

reservation application Code refactoring 후기

1. 새로 배웠거나 향상되었다고 느끼는 점

- 코드 중복을 줄이는 것이 좀더 능숙해졌다.

- 변수명을 rename하는 요령이 생겼다.

- 디버깅 능력이 이전과 비교해 많이 상승하였다.(슬프지만 이부분이 가장 큰 듯)

- git 사용법을 익혔다.


2. 코드 중복을 줄이고, 변수명을 rename하였는 데도 가독성이 떨어지는 코드.

사수님 질문
- 이 코드 뭉치(?)는 어떤 역할을 하나요?
   -> 코드 부분이 갖는 기능적 역할을 명확히 구분짓고 정의하면, 개념적으로 코드들을 분리해서 다른 method로 빼낼 수 있다.

- parameter로 실질적인 input이 아닌 값을 받지 않으려면 어떻게 해야하나요?
   -> 실질적인 input이 아님에도 parameter로 받아야하는 값을 해당 메소드에서 사용할 수 있도록 한다. ex) 기존 method외부에 변수를 선언하여 사용가능하게끔 바꿈, 기존 method에 선언하였던 변수를 새로운 method에 선언함.



** 중요 : 코드 가독성을 높이는 데는 개념적으로 코드를 분리하는 것이 중요하다.

2014년 2월 10일 월요일

[Java] parameter에 "변수명 = 값"을 넣으면?

원래 parameter에 "변수명 = 값"이라고 넣은 건
parameter에 값을 전달하고 해당 변수명에 값을 할당하려는 시도였다.

시도했던 코드 : 
while(reader.ready() && !data[0].equals(line = username + "\t" + password
                    + "\t" + phoneNumber + "\t" + String.valueOf(reservedOrNot))){
                readLine = reader.readLine();
                data = readLine.split(";");
            }

굵은 글씨 부분이다.

그런데 java 문법에 어긋난 행위다. 에러남

???????????


package classchum;

public class Test1212 {
public static void main(String argv[]){
int a, b;
a = test(b=2, 1);
System.out.println(a);
System.out.println(b);
}

static public int test(int a, int b){
return b;
}
}

결과:
1
2