우선순위 큐란? 자료가 들어오는 순서와 상관없이, 우선순위가 제일 높은 데이터가 먼저 빠져나간다 우선순위 큐의 활용사례 네트워크 트래픽 제어 운영 체제에서 프로세스 스케줄링 시뮬레이션 자료구조 삭제되는 데이터 스택(Stack) 가장 최근에 들어온 데이터 (Last In First Out) 큐(Queue) 가장 먼저 들어온 데이터 (First In First Out) 우선순위 큐(Queue) 우선순위가 제일 높은 데이터 힙이란? 완전 이진 트리로, 우선순위 큐를 위하여 만들어진 자료구조이다. 우선순위가 제일 높은 데이터를 바로 찾아내도록 만들어진 자료구조다 힙은 일종의 반정렬 상태를 유지한다. 우선순위가 제일 높은 값이 루트 노드에 존재한다. 부모 노드가 자식 노드보다 우선순위가 높지만, 완전히 정렬된 상..
자바가 제공하는 다중 구현 매커니즘은 인터페이스와 추상 클래스이다 자바가 제공하는 다중 구현 메커니즘은 인터페이스와 추상 클래스, 이렇게 두 가지다. 다만 둘 사이엔 아주 중요한 차이점이 존재한다. 추상 클래스의 경우 타입을 구현하는 클래스는 반드시 추상 클래스의 하위 클래스가 되어야 한다 인터페이스가 선언한 메서드를 모두 정의하고 규약을 잘 지킨 클래스라면 다른 어떤 클래스를 상속했든 같은 타입으로 취급된다. 클래스는 여러 개의 인터페이스를 동시에 구현할 수 있다. 기존 클래스에 손쉽게 새로운 인터페이스를 구현해 넣을 수 있다 인터페이스는 상속의 관계가 아니고, 여러개를 구현할 수 있기 때문에 만약 새로운 기능이 추가된다면 기존 클래스에 손쉽게 추가할 수 있다. 인퍼테이스가 요구하는 메서드가 아직 없다..
Coroutine - 2 기본 사용법 Coroutine 개념 코루틴이란? 코루틴은 Kotlin 을 사용해 안드로이드 앱을 개발할 때 아마 가장 처음 접하게 되는 키워드 일것이다. 보통 네트워크 통신, 혹은 내부 DB에서 데이터를 불러오거나 저장할 forstudy.tistory.com 코루틴 취소하기 장시간 동안 동작하는 어플리케이션의 경우, 백그라운드에서 동작하는 코루틴에 대해 세세한 컨트롤이 필요하다. 만약에 코루틴이 시작한 상태에서 해당 코루틴의 결과를 받을 웹 페이지, 혹은 어플리케이션이 종료된다면 코루틴의 결과는 필요 없어지고, 취소해야 한다. 만약 더 이상 코루틴의 결과가 필요하지 않는데도 계속 실행한다면, 메모리와 성능을 낭비하고 배터리를 많이 잡아먹게 된다. 이전 글에서 launch 라는 코..
Coroutine 개념 코루틴이란? 코루틴은 Kotlin 을 사용해 안드로이드 앱을 개발할 때 아마 가장 처음 접하게 되는 키워드 일것이다. 보통 네트워크 통신, 혹은 내부 DB에서 데이터를 불러오거나 저장할 때 사용하게 forstudy.tistory.com suspend fun fun main() { runBlocking { launch { delay(1000) println("World") } println("Hello!") } } 지난 글에서 suspend 함수는 Coroutine 에서 사용할 수 있는 함수로, suspend 함수를 사용함과 동시에 쓰레드가 프로그램의 나머지 코드를 수행할 수 있도록 해주는 함수라고 설명했다. 위 launch 로 생성된 coroutine 이 실행하는 코드를 suspe..
코루틴이란? 코루틴은 Kotlin 을 사용해 안드로이드 앱을 개발할 때 아마 가장 처음 접하게 되는 키워드 일것이다. 보통 네트워크 통신, 혹은 내부 DB에서 데이터를 불러오거나 저장할 때 사용하게 되며, 기존에 학습곡선이 높은 RxJava 와는 다르게 쉽게 비동기 처리를 하도록 도와준다. 코루틴을 간단하게 설명하면 다음과 같다. 협동 멀티태스킹 쉽게 비동기 처리를 도와줌 동시성 프로그래밍 협동 멀티태스킹 Coroutine 은 Co + Routine 으로 이루어져 있다. 여기서 Co 라는 접두어는 "협력", "함께" 라는 의미를 뜻한다. Routine 이라는 단어가 조금 생소한데, 함수라고 생각하자. 우리는 평소에 다음과 같이 코드를 작성한다. 간단한 Kotlin 코드를 살펴보자. fun main() {..
State 의 정의 어플리케이션에서 State란 시간이 지남에 따라 계속 변화할 수 있는 모든 값을 의미한다. state 는 Room database 에 저장된 값일 수도 있고, 클래스의 프로퍼티일 수도 있다. Android Application 을 예로 들자면 다음과 같은 것들이 모두 상태를 유저에게 보여주는 것이라고 할 수 있다. 블로그 게시물과 댓글들 네트워크 연결 오류 스낵바 유저가 클릭시 보여지는 버튼 애니메이션 Android의 UI Update Android 에서 UI 업데이트는 대게 위와 같은 과정을 따라 수행된다. 유저에 의해, 혹은 어떤 식으로든 이벤트가 발생한다. (버튼 클릭, 게시물 추가, 댓글 추가 등등) 이벤트에 의해 State 가 변경됨 변경된 State 를 보여준다 (새로운 S..
어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐다. 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API 를 깔끔히 분리한다. 정보 은닉, 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리다. 정보 은닉의 장점 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있다. 시스템 관리 비용을 낮춘다. 각 컴포넌트를 더 빨리 파악하여 디버깅할 수 있고, 다른 컴포넌트로 교체하는 비용도 적다. 소프트웨어 재사용성을 높인다. 외부에 거의 의존하지 않고 독자적으로 동작할 수 있는 컴포넌트라면 그 컴포넌트와 함께 개발되지 않은 낯선 환경에서도 유용하게 쓰일 가능성이 크기 때문이다...
우리가 클래스를 작성할 때, Object 의 기본 toString() 메서드가 우리가 작성한 클래스의 유의미한 정보를 제공해주는 경우는 거의 없다. 이 메소드는 PhoneNumber@adbbd 처럼 단순히 클래스_이름 @ 16진수로 표현한 해시코드 를 반환할 뿐이다. 잘 정의된 toString 은 디버깅을 손쉽게 만들어준다 Java에서 toString 의 규약은 모든 하위 클래스에서 이 메서드를 재정의하라고 한다. toString 을 잘 구현한 클래스는 사용하기에 훨씬 즐겁고, 그 클래스를 사용한 시스템은 디버깅하기 쉽다. toString 메서드는 객체를 println, printf, 문자열 연결 연산자, assert 구문에 넘길 때, 혹은 디버거가 객체를 출력할 때 자동으로 불린다. 예컨대 우리가 작성..
Comment