목표 Context란 무엇인지 이해한다. ApplicationContext와 ActivityContext의 차이에 대해 이해한다. 적절한 곳에 context를 사용할 수 있도록 한다. Context Context란 추상 클래스로, Application environment의 global한 정보에 접근하기 위한 인터페이스이다. Application environment의 global한 정보란 Application의 resource(getPackage(), getResource())나 Android 시스템에서 제공하는 API(startActivity(), startService(), getSystemService())에 대한 정보를 뜻한다. 구현은 안드로이드 시스템에 의해 제공되며, 앱 개발자가 직접 구현할..
분류 전체보기
개요 AndroidManifest.xml은 앱의 필수 구성요소이다. AndroidManifest.xml에서는 아래 3가지가 정의되며, 정의되지 않은 권한이나 구성요소를 앱 구동 시 사용할 수 없다. 앱의 고유한 식별자인 패키지명, 안드로이드 앱에서 필요한 권한, 안드로이드 구성요소(Activity, Service, Broadcast Recevicer, ContentProvider) AndroidManifest.xml 파일에서 정의되지 않으면 앱의 구성요소로 인식이 되지 않아 사용할 수 없게 된다. 이미 눈치 챘겠지만 안드로이드의 모든 핵심 구성요소가 AndroidManifest.xml에서 정의되며, 따라서 AndroidManifest.xml을 사용하는 방법을 아는 것은 매우 중요하다. 패키지명 선언 An..
목표 String이 Heap 메모리 상에서 어떻게 저장되는지 확인한다. 개요 JVM에서 변수를 저장하게 선언하면 해당 변수는 Heap Area에 저장된다(그림1 참조). String도 Heap Area에 저장되는 것은 마찬가지인데 String은 많이 쓰이는 변수인 만큼 조금 특이한 방식으로 저장된다. *이것에 익숙하지 않다면 먼저 JVM의 메모리 사용 방식을 보고 오자 String은 우리가 가장 많이 쓰는 클래스 중 하나이다. String을 효율적으로 사용하기 위해 JVM상에서 String을 다른 객체들과 차별되게 저장되도록 해놓았는데, 그것이 바로 Heap Area 상의 String Constant Pool이다. 예를 들어 다음과 같은 코드가 실행된다고 해보자 val stringA1 = "A" val ..
목표 String, StringBuilder, StringBuffer의 차이점을 안다. 멀티 스레드 환경에서 StringBuffer을 이용해야 하는 이유를 안다. 개요 문자열과 관련된 프로그래밍을 위해서라면 String을 사용해야 한다. 아마 Java나 Kotlin으로 프로그래밍 하는 사람이라면 누구나 String을 사용해 보았을 것이다. val kotlinWorld: String = "Kotlin" + "World" 하지만, String을 여러번 바뀌는 문자열을 위해 사용하는 것은 좋지 않다. 이유는 String은 내부에 value값이 final로 선언되어 있는 불변 객체고 값을 바꾸기 위해서는 새로운 객체에 할당을 해주어야 해서 비용이 크기 때문이다. 이에 따라서 우리는 String을 만들기 위해서 ..
목표 JVM 프로세스와 멀티 스레드 환경에 대해 이해한다. 공유되는 자원과 공유되지 않는 자원의 차이와 공유되는 자원의 접근 시 주의할점에 대해 이해한다. 개요 앞서 프로세스란 자원을 할당받아 실행되는 프로그램이라고 말했다. 즉, JVM은 하나의 프로세스이다. 하나의 프로세스는 여러 작업 단위를 가질 수 있는데 이 작업 단위를 바로 스레드라고 한다. JVM에서는 Main Thread라 불리는 쓰레드가 있고, 우리가 main() 메서드를 사용해 불리는 것이 바로 Main Thread이다. Main Thread가 종료되면 나머지 Thread 들도 자동으로 종료가 된다. 즉, JVM에서 Main Thread가 살아있는 것은 필수적이다. 하지만, 여러 Thread로 동시에 연산을 할 수 있음에도 Main Thr..