본문 바로가기

전체 글

(29)
Coroutine (조금 더 글을 보충해야할 필요가 있다.) 코틀린의 코루틴은 suspending functions 는 future나 promise보다 훨씬 좋다. kotlin 공식문서 피셜 비동기 동작에서 더욱 안전하고 에러도 적은 추상화를 제공해준다고 한다. https://kotlinlang.org/docs/coroutines-guide.html 뭐.. 위의 자료를 참고하면 될듯. kotlin의 공식문서를 참고해서 공부한 내용을 정리한 것이다. 아래는 공식문서 링크. https://kotlinlang.org/docs/coroutines-basics.html#your-first-coroutine Your first coroutine 코루틴은 일시정지가 가능한 구성요소다. 스레드 개념과 비슷한데, 다른 코드를 동시실행하는..
추상화란 추상클래스란 추상화란? 핵심적인 개념 또는 기능을 간추려 내는것을 의미한다. 추상화의 종류 -반복되는 내용을 for문이나 while 문으로 추리는 것도 추상화의 한 내용이라고 한다. -인터페이스 -상속 -추상클래스 추상화의 장점 -일단 데이터를 추상화 하고 나면 여기저기서 다시 추상화했던 데이터를 사용할 수 있기 때문에 좋다. 추상클래스란? -하나 이상의 추상클래스를 가지는 클래스를 추상 클래스라고 부른다. 추상클래스는 OOP타입의 클래스이고, 추상클래스는 하나 이상의 추상 메소드를 선언한다. 추상클래스는 concrete메소드와 마찬가지로 추상 메소드를 가질 수 있다. 일반 클래스는 추상메소드를 가질 수 없다. 추상 클래스는 적어도 하나 이상의 추상메소드를 가질 수 있다. 추상메소드란? -추상메소드란 정의는 되어있지..
객체지향의 4대 특징 1.추상화 추상화란 핵심적으로 중요한 내용과 그렇지 않은 내용을 가려내는 것을 의미한다. 실생활에서 추상화를 설명할때 초기 지하철 지도를 예로 들면서 설명을 한다. 아래의 사진은 세계 최초의 지하철 지도다. 보고 바로 이해가 잘 안된다. 가독성이 떨어지고 불필요한 정보가 많다. 어떤 것이 불필요한 정보인지 일일이 설명하지는 않겠다. 여하튼 '추상화' 의 과정을 거치면 우리가 아는 오늘날의 원형에 가까운 지하철 지도가 등장한다. 훨씬 보기 편해진다. 개발에서 추상화는 공통적인 내용을 가려내는 것을 의미한다. 부모클래스를 둬서 자식클래스에서 중복되지 않는 메소드나 필드를 설정하는 것도 추상화중 하나다. 추상 클래스나 인터페이스를 사용해서 추상메소드를 사용하게끔 만드는 것도 추상화의 한갈래이다. 중복되는 내용..
inline 함수와 reified type inline 함수란? 함수 호출 시 별도로 분리된 위치의 레이블로 점프하여 실행되는 일반 함수와는 달리 호출 부분을 함수 전체 코드로 치환하여 컴파일한다. 고차함수(함수를 인자로 전달받거나 함수를 결과로 반환하는 함수 : 람다)수를 사용할때 오버헤드 현상이 발생하지 않도록 해주는 함수다. 오버헤드(overhead)는 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등을 말한다. 예를 들어 A라는 처리를 단순하게 실행한다면 10초 걸리는데, 안전성을 고려하고 부가적인 B라는 처리를 추가한 결과 처리시간이 15초 걸렸다면, 오버헤드는 5초가 된다. 또한 이 처리 B를 개선해 B'라는 처리를 한 결과, 처리시간이 12초가 되었다면, 이 경우 오버헤드가 3초 단축되었다고 말한다 고차함수를 사용할때..
lamda 람다란? 정의 A lambda function is a simple, short, throwaway function which is designed to be created inline in code. They're also known as lambda expressions, anonymous functions, lambda abstractions, lambda form, or function literals. 람다함수란 -함수형 프로그래밍에서 사용되는 개념으로 익명 함수라고도 부른다. -자바8부터 지원하고 불필요한 코드를 줄이고 가독성을 향상 시키는 것을 목적으로 두고 있다. 익명함수를 람다식으로 바꾸기 근데 위와 같이 람다식으로 바꾸기 위해서는 몇가지 충족요건이 필요하다. 안맞으면 람다식으로 표현할 수 없다...
Object expressions and declarations (객체 표현식과 선언식) 출처 https://kotlinlang.org/docs/object-declarations.html#using-anonymous-objects-as-return-and-value-types 코틀린의 object와 companion object를 공부하기 위해서 공식문서의 글을 보고 해석 및 의역후 정리한 내용이다. 만약 공식문서를 참조하면서 공부한다면 매우 요긴하게 읽을 수 있을 것이다. Object expressions and declarations Sometimes you need to create an object that is a slight modification of some class, without explicitly declaring a new subclass for it. Kotlin ..
리스코프 치환원칙 리스코프 치환 원칙(Liskov subsititon Principle) public class Dog extends Animal{ @Override public void speak() { System.out.println("멍멍!!"); } } 정의 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위는 수행이 보장되야 한다. 다르게 말해서는.. 다형성의 특징을 이용하기 위해 상위 클래스 타입으로 객체를 선언하여 하위 클래스의 인스턴스를 받으면, 업캐시팅된 상태에서 부모 메소드를 사용해도 동작이 의도대로만 흘러가도록 구성해야 한다는 것이다. 자바에서 개발하다보면 아래와 같은 코드를 매우 많이 봤을 것이다. List tmp = new ArrayList(); List 는 인터페이스이고 ArrayList는..
Handler, Looper 핸들러와 루퍼의 의미 뭐하는 애일까? 서브 스레드에서 UI 관련 작업을 할 수 있도록 도와주는 클래스다. 안드로이드에서 ui관련 작업은 메인스레드에서만 가능하다. 스레드간의 동시성 문제 때문에 ui관련 작업에 한해서는 그렇게 하기로 정했다. 서브스레드에는 TextView에서 '로딩중' 이라는 글자를 입력하려고 하고 메인 스레드에서는 '로딩 완료!' 라는 텍스트를 입력하려고 한다고 생각한다면 그냥 마지막에 실행되는 스레드가 뭐냐에 따라서 보여지는 결과가 다를 것이다. 이런 혼돈을 막고자 메인 스레드에서만 ui 관련 작업을 할 수 있도록 설정했다. 핸들러를 사용해서 메세지를 전송하고 Message를 처리할 수 있다. 토막상식 : 스레드끼리는 메세지를 통해서 의사소통을 한다. 워커 스레드가 메인 스레드에게 메세지를 던지면 이를 수..