전체 글

전체 글

    [Android] 안드로이드 스튜디오 GradleView Tasks 미노출시

    Gradle View의 Tasks 기능을 사용할 기능이 있어서 봤더니 아무리 찾아봐도 Tasks가 없었다. 4.2 이후 버전에서는 성능 향상때문에 task 리스트들이 숨겨지는 게 기본값으로 설정되어 있다고 한다. Preferences -> Experimental로 가서 'Do not build Gradle task list during Gradle sync' 체크박스를 해제하면 된다. 해제 후에는 'Sync Project with Gradle Files'를 한번 실행해주자.

    [Android] Gradient 배경 만들기

    Drawable xml을 아래와 같이 정의하여 Gradient Background를 정의할 수 있다. gradient의 속성 값들에 대한 설명은 아래와 같다.- type : linear(기본값), radial, sweep - angle : gradient의 기준 방향을 나타내며 원하는 각도를 정의함. - endColor : gradient의 끝 색상 - centerColor : gradient의 중간 색상 - startColor : gradient의 시작 색상 - gradientRadius : gradient의 반지름 값. type이 'radial'인 경우에만 적용 가능.

    [클린 코드] 함수(2)

    오류 코드 대신 예외 사용하기 명령 함수에서 오류 코드를 반환하는 형태의 처리는 명령/조회 분리 규칙을 모호하게 위반할 수 있다. 왜냐하면 if문에서 명령을 표현식으로 사용하기 쉬운 구조가 되기 때문이다. if(deletePage(page) == OK){ ... } 위 코드는 여러 단계로 중첩되는 코드를 발생시킨다. 오류 코드를 반환하면 호출자는 오류 코드를 곧바로 처리해야 하기 때문이다. if (deletePage(page) == OK) { if(registry.deleteReference(page.name) == OK) { if(configKeys.deleteKey(page.name.makeKey()) == OK){ logger.log("Page deleted"); }else{ logger.log("..

    [클린 코드] 함수(1)

    명령과 조회 명확히 분리하기 함수는 무엇인가를 수행하거나, 답하거나 둘 중 한가지만을 해야한다. 객체의 상태를 변경하거나, 객체의 정보를 반환하거나 둘 중 하나만 해야한다는 말이다. 예를 들어 다음 함수를 예를 들어 보자. fun set(attr: String. value: String): Boolean { ... } 위 set 함수는 이름이 attr인 속성을 찾아 값을 value로 바꾼 후 성공한다면 true를 실패한다면 false를 리턴한다. 문제는 이런 메소드를 사용하면 아래와같은 어색한 형태의 코드가 나온다. if(set("name", "MJ")){ ... } 이런 형태의 메소드가 가지는 단점은 누군가가 이 코드를 볼때 "name"이 "Tom"으로 설정 되어있는지 체크하는 코드인지, 아니면 "na..

    [Java] volatile 키워드

    특징 keyword로 Java 변수를 Main Memory에 직접 저장한다. 변수의 값을 Read 할 때마다 CPU Cache에 저장된 값이 아닌 Main Momory에서 직접 읽는다. 변수의 값을 Write할 때마다 Main Memory에 직접 작성한다. 필요성 멀티 스레드 환경에서 하나의 스레드가 Read&Write 하고 다른 스레드에서 Read 할 때, 해당 변수에 대한 최신 값을 보장한다. 예시 class Object { public int count = 0; } 위 Object를 공유하는 두 개의 스레드 A, B가 있다고 가정하자. 스레드 A는 count의 값을 읽고 1씩 증가시키는 연산(Read&Write)을 하고 스레드 B는 count를 읽는 연산만 수행한다(Read). A는 count값을 ..

    임계 영역 동시접근 해결 방안

    Lock 정의 하나의 프로세스 혹은 스레드가 임계 영역(critical section)에 진입할 경우 Lock을 획득하고, 임계 영역에서 빠져나올때 Lock을 되돌려줌으로써 두 개 이상의 프로세스나 스레드가 동시에 임계영역에 진입할 수 없도록 하는 방법이다. 문제점 A라는 스레드가 Lock 함수를 실행하다 변수의 값을 변경하기 전에 인터럽트가 발생하여 값을 변경하지 못하고 B 또는 다른 스레드가 추가로 Lock 함수에 들어오면 두 개의 스레드가 임계 영역에 동시 접근해버리는 상황이 발생한다. 해결방법 더 이상 쪼개지지 않는 하드웨어 명령어로 구현, 인터럽트를 disalbe 하고 enable 하는 방법이 있다. Semaphore 정의 세마포어는 '수기 신호' 라는 뜻으로 프로세스의 동기화 도구이다. 세마포..