본문 바로가기
[RxJava] #1 리액티브 프로그래밍 소개 -RxJava 라이브러리는 1.x 버전을 거쳐 2016년 10월에 점면 개편된 RxJava 2.0 을 출시. 1.1. 리액티브 프로그래밍 -리액티브 프로그래밍은 데이터 흐름과 전달에 관한 프로그래밍 패러다임.명령형(imperative) 프로그래밍은 주로 컴퓨터 하드웨어를 대상으로 프로그래머가 작성한 코드가 정해진 절차에 따라 순서대로 실행된다.그러나 리액티브 프로그래밍은 데이터 흐름을 먼저 정의하고 데이터가 변경되었을 때 연관되는 함수나 수식이 업데이트되는 방식. -명령형 프로그래밍 방식은 변경이 발생했다는 통지를 받아서 자료를 다시 가져오는 pull 방식이지만, 리액티브 프로그래밍은 데이터 소스가 변경된 데이터를 함께 주는 push 방식이다.일종의 옵저버 패턴이다. -리액티브 프로그래밍은 1990년대에.. 2019. 5. 31.
[Objective-C] 예외와 에러 [Objective-C] 예외와 에러 출처 : OS X 구조를 이해하면서 배우는 Objective-C Chap 18. 18.1. 예외란 * 18.1.1. 예외 처리 개념 -예외(exception)는 프로그램의 정상적인 실행을 중단하고 대응해야 할 특별한 상황을 뜻한다. 예를 들어 NSMutableArray 의 메서드 addObject: 는 인수 객체를 리시버인 배열에 추가하는데, 인수가 nil 일 때는 부정한 인수라는 걸 나타내는 NSInvalidArgumentException 가 발생한다.메서드 objectAtIndex: 로 참조하려고 한 인덱스가 요소 개수를 벗어나면 범위 오류를 나타내는 예외 NSRangeException 이 발생한다. * 18.1.2. Objective-C 예외 처리 -예외가 일어.. 2018. 1. 9.
[Effective Objective-C] #39 핸들러 블록을 사용해 코드가 여러 개로 나뉘는 것을 막으라 [Effective Objective-C] #39 핸들러 블록을 사용해 코드가 여러 개로 나뉘는 것을 막으라 출처 : Effective Objective-C -특정 상황에서 앱이 특정 시간 동안 응답하지 않으면 자동으로 종료될 수 있다.특히 iOS 앱은 반드시 종료된다.시스템 와치독(system watchdog)은 특정 시간 동안 메인 스레드가 중단된 앱은 강제로 종료시킨다. -비동기 메서드를 쓰면 일을 끝냈을 때 완료 사실을 알고 싶어 하는 것들에 완료 사실을 알려주는 방법이 필요하다.이를 할 수 있는 방법이 몇 가지 있다.일반적으로 쓰는 방법은 객체가 따를 수 있는(conform) 델리게이트 프로토콜을 이용하는 것이다.델리게이트 객체는 비동기 작업의 완료 같은 적절한 이벤트가 발생하면 알림을 받을 수.. 2017. 10. 3.
[android] targetSdk, compileSdk 수정 후 - :app:dexDebug ExecException finished with non-zero exit value 1 에러가 나면.. [android] targetSdk, compileSdk 수정 후 - :app:dexDebug ExecException finished with non-zero exit value 1 에러가 나면.. http://stackoverflow.com/questions/30001051/appdexdebug-execexception-finished-with-non-zero-exit-value-2 Clean build 한번 하고 다시 compile 해보시길.. 왠만한 에러는 clean build 하면 대충 해결되는듯... 그래서 앞으로는 Compile 이 갑자기 안 되면 Clean build 하고 컴파일 해보고.. 그래도 안 되면 검색해봐야겠다.. appdexdebug, Clean, clean build, Comp.. 2017. 8. 28.
[Java] nio vs io ( package level 에서의 개념, not 성능 ) [Java] nio vs io ( package level 에서의 개념, not 성능 ) http://tutorials.jenkov.com/java-nio/nio-vs-io.html -IO stream oriented blocking IO NIO buffer oriented non-blocking IO selectors -Stream oriented 한개 또는 그 이상의 byte 를 stream 에서 읽어온다. stream 에서 앞뒤로 왔다갔다 할 수 없다. ( buffer 를 사용해 cache 해야 가능하다. ) -Buffer oriented 우선 buffer 에 읽어오고 그 다음에 process 를 한다. buffer 를 통해 앞뒤로 왔다갔다 할 수 있다. -Blocking IO 는 read(), w.. 2017. 6. 11.
Strong / Weak / Dynamic / Static type Strong / Weak / Dynamic / Static type http://nvec.egloos.com/2251285http://en.wikipedia.org/wiki/Strong_and_weak_typing -Dynamic typing 은 변수의 타입이 프로그램의 어느 시점에서든 변경이 가능하고, ( Runtime 에 결정 )Static typing 은 그렇지 않다. ( Compile time 에 결정 ) -Strong type 은 프로그램을 보고 바로 에러를 찾아낼 수 있는 것이고,Weak type 은 그렇지 않다. Strong type 은 해당 type 에 할 수 있는 일들이 명확하게 정의되어 있다.Weak type 은 사용되는 시점에 암시적으로 cast 가 될 수도 있고, ad-hoc pol.. 2017. 6. 5.
[Java Concurrency] 활동성 최대로 높이기 #2 [Java Concurrency] 활동성 최대로 높이기 #2 10.2. 데드락 방지 및 원인 추적 - 한 번에 하나 이상의 락을 사용하지 않는 프로그램은 락의 순서에 의한 데드락이 발생하지 않는다. 물론 그다지 실용적이지 않은 방법일 수 있지만, 가능하다면 한 번에 하나 이상의 락을 사용하지 않도록 프로그램을 만들어 보는 것도 좋다. - 여러 개의 락을 사용해야만 한다면 락을 사용하는 순서 역시 설계 단계부터 충분히 고려해야 한다. 설계 과정에서 여러 개의 락이 서로 함께 동작하는 부분을 최대한 줄이고, 락의 순서를 지정하는 규칙을 정해 문서로 남기고 그 규칙을 정확하게 따라서 프로그램을 작성해야 한다. - 세세한 수준에서 락을 관리하는 프로그램에서는 두 단계의 전략으로 데드락 발생 가능성이 없는지를 확.. 2017. 5. 2.
[Effective Java] 실패 원자성을 갖도록 노력하자 [Effective Java] 실패 원자성을 갖도록 노력하자 - 일반적으로 호출된 메소드가 실행에 실패하더라도 객체 상태는 메소드 호출 전과 같아야 한다. 이런 특성을 갖는 메소드를 실패 원자성(failure atomic) 메소드라 한다. - 가장 간단한 방법은 불변 객체로 설계하는 것이다. 객체가 불변이면 실패 원자성과는 아예 무관하다. - 가변 객체를 처리하는 메소드의 경우에 실패 원자성을 성취하는 가장 보편적인 방법은 연산 수행 전에 매개 변수의 유효성을 검사하는 것이다. - 실패 원자성을 성취하는 더 좋은 방법은, 객체를 변경하는 코드 부분에 앞서 실패할 수 있는 코드 부분이 실행되도록 연산 순서를 조정하는 것이다. - 또 다른 방법은 ( 흔하지 않지만 ) 연산 도중에 발생하는 실패를 가로채는 복.. 2017. 3. 3.
[Effective Java] 다른 타입을 쓸 수 있는 곳에서는 String 사용을 피하자. [Effective Java] 다른 타입을 쓸 수 있는 곳에서는 String 사용을 피하자. - String 으로 다른 값 타입을 대체하는 것은 좋지 않다. 파일, 네트웍, 키보드 입력으로부터 데이터가 프로그램으로 전달될 떄 문자열 형식인 경우가 많고, 그것을 그대로 놔두려는 경향이 있다. 그러나 그것은 실제로 데이터가 원문 그대로일 때만 옳다. 만일 데이터가 숫자라면 int, float, BigInteger 와 같이 적합한 숫자 타입으로 변환되어야 한다. - String 으로 enum 타입을 대체하는 것은 좋지 않다. - String 으로 집합(aggregate) 타입을 대체하는 것은 좋지 않다. ex) className + "#" + value 이런 경우 문자열 분석을 해야 해 속도가 느리고, 코드가.. 2017. 2. 6.
반응형