본문 바로가기

책 요약하기

(37)
#03-2. 함수와 함수형 프로그래밍 2021-04-20 03-4 고차 함수와 람다식의 사례 동기화를 위한 코드 먼저 동기화란 변경이 일어나면 안되는 특정 코드를 보호하기 위한 잠금 기법, 동기화로 보호되는 코드는 임계 영역(Critical Section)이라고 부릅니다. 이 코드에서는 Lock을 활용해 임계 영역을 보호하고 있습니다. 보통 프로그래밍에서는 특정 공유 자원에 접근한다고 했을 때 공유 자원이 여러 요소에 접근해서 망가지는 것을 막기 위해 임계 영역의 코드를 잠가 두었다가 사용한 후 풀어 줘야 합니다. // JAVA - Lock, ReentrantLock fun lockCode() { Lock lock = new ReentrantLock() lock.lock(); // 잠금 try { // 보호할 임계 영역의 코드 // 수행할 작업 } finall..
#6. 권한 2021-03-18 1.1 권한 명세와 기능 명세 설정 파일에 작성하는 명세에는 권한 명세와 기능 명세 두 가지가 있습니다. 권한 명세는 해당 데이터나 기능의 사용여부를 설정하고, 기능 명세는 해당 기능이 있는 안드로이드폰에서만 내려받을 수 있도록 플레이 스토어에서 내려받는 것을 방지합니다. 권한 명세 권한 명세를 설정하는 AndroidManifest.xml 파일은 [app] - [manifests] 디렉터리 밑에 있습니다. 예시로 와이파이 권한과 인터넷 접근 권한을 부여하는 코드입니다. 기능 명세 권한 이외에도 기능에 대한 명세가 필요할 때가 있는데 기능 명세는 AndroidManifest.xml파일에 따로 추가하지 않아도 해당 기능을 사용할 때 시스템이 자동으로 부여합니다. 이때 사용하는 태그가 태그입니다. 예를 들어 ..
#03-1. 함수와 함수형 프로그래밍 2021-03-17 03-1 함수란? 함수는 여러 값을 입력받아 기능을 수행하고 결괏값을 반환하는 코드의 모음 함수 간결하게 선언 fun sum(a: Int, b: Int): Int { return a + b } fun sum(a: Int, b: Int) = a + b 인자? 매개변수? 매개변수와 인자는 같은 역할을 하는 것처럼 보이기 때문에 같은 것으로 착각하기 쉽지만 이 둘은 명확하게 구분할 수 있는 개념입니다. 함수를 선언할 때는 매개변수라고 부르고 함수를 호출할 때는 인자라고 부릅니다. 즉, sum(a: Int, b: Int) 함수의 선언 부분의 a: Int, b: Int는 매개변수이고 main() 함수에서 sum()함수를 호출할 때 sum(3, 2)에서 3, 2는 인자입니다. 이 인자는 함수 선언 부분에 있는 a와..
#5.5 탭 메뉴로 화면 구성 ViewPager와 TabLayout 2021-03-14 5.1 ViewPager에서 프래그먼트 사용하기 ViewPager와 Adapter 뷰 페이저는 리사이클러뷰와 구현 방식이 비슷한데 한 화면에 하나의 아이템만 보여지는 리사이클러뷰라고 생각하면 됩니다. 페이저어댑터를 통해서 뷰페이저에서 보여질 화면들을 연결하는 구조도 리사이클러뷰와 동일합니다. 1. 뷰페이저 어댑터 생성 합니다. 2. 뷰페이저어댑터를 만듭니다.(뷰페이저에 프래그먼트를 보여주기 위해서) FragmentAdapter 클래스를 생성한 후에 FragmentPagerAdapter를 상속받습니다. class FragmentAdapter : FragmentPagerAdapter { } 3. FragmentPagerAdapter 뒤에서 [Alt+Enter] 클릭 한 후에 파라미터가 2개인 생성자로 선택하..
#5-3. 프래그먼트 2021-03-12 3. 액티비티의 조각 프래그먼트 다루기 화면을 분할해서 독립적인 코드로 구성할 수 있게 도와주는 것이 프래그먼트(Fragment) 입니다. 가령 프래그먼트는 서로 다른 크기의 화면을 가진 기기(태블릿, 스마트폰 등)에서 하나의 액티비티로 서로 다른 레이아웃을 구성할 수 있도록 설계되었습니다. 목록 프래그먼트와 상세 프래그먼트가 있을 때 태블릿과 같은 큰 화면에서는 두 프래그먼트를 한 화면에 표시하고, 스마트폰처럼 작은 화면에서는 먼저 목록 프래그먼트만 표시한 후 목록을 클랙하면 상세가 나타나는 구조입니다. 프래그먼트를 활용한 구조 한 번에 1개의 프래그먼트가 화면에 나타나는 형태는 프래그먼트 여러 개를 미리 만들어두고 탭 메뉴나 스와이프(Swipe)로 화면 간 이동을 할 때 사용됩니다. 한 번에 여러 개..
#5-2. 컨테이너 2021-03-12 2. 컨테이너 : 목록 만들기 위젯의 위치를 다룰 때 레이아웃을 사용해싿면 위젯이나 다른 레이아웃에 데이터를 동적으로 표현해줄 때 컨테이너를 사용합니다. 컨테이너는 데이터를 반복적으로 표시하는 용도로 사용하는데 대표적인 컨테이너로는 목록을 화면에 출력할 때 사용하는 리사이클러뷰(RecyclerView)가 있습니다. 2.1 스피너 스피너(Spinner)는 여러 개의 목록 중에 하나를 선택할 수 있는 선택 도구입니다. // 스피너에 사용할 목록 생성, 어댑터 생성, 스피너에 어댑터 등록 var data = listOf("- 선택하세요 -", "1월", "2월", "3월", "4월", "5월", "6월") var adapter = ArrayAdapter(this, android.R.layout.simple_l..
#5-1. 화면 구성하기 2021-03-12 1. 컨텍스트 1.1 컨텍스트란 컨텍스트(Context)는 시스템을 사용하기 위한 정보(프로퍼티)와 도구(메서드)가 담겨 있는 클래스입니다. 대부분의 컨텍스트는 컴포넌트 실행(Running) 시 함께 생성되고, 생성된 컴포넌트가 가지고 있는 메서드를 호출해서 각각의 도구들을 사용할 수 있습니다. 안드로이드에서의 컴텍스트는 입을 실행하기 위해 잘 짜여ㄷ진 설계도의 개념으로 앱에서 사용하는 기본 기능이 담겨있는 기본 클래스(Base Class)입니다. 액티비티는 컨텍스트를 상속받아 구현됩니다. 액티비티처럼 컨텍스트를 상속받은 컴포넌트들은 코드상에서 baseContext를 호출하는 것만으로 안드로이드의 기본 기능을 사용할 수 있습니다. 컨텍스트의 종류 1. 애플리케이션 컨텍스트(Application Conte..
#1일차. 1장, 2장 2021-03-11 1장 코틀린 시작하기 코틀린의 main() 함수는 프로그램의 실행 진입점 자바 같은 객체 지향 언어에서 프로그램을 실행하려면 최소한 하나의 클래스와 그 안에 main() 함수가 있어야 하지만 코틀린은 선언한 클래스가 없는데도 불구하고 main() 함수와 println() 함수를 통해 콘솔에 문자열 "Hello Kotlin"을 출력하고 있습니다. 코틀린 코드는 JVM에서 실행되며, main() 함수가 있는 파일 이름을 기준으로 자바 클래스가 자동 생성됩니다. [Tools > Kotlin > Show Kotlin ByteCode > Decompile] 프로그램의 메모리 영역 프로그램이 사용하는 메모리 영역에는 여러 가지가 있습니다. 명령어가 들어가는 코드 영역과, 프로그램이 컴파일되면 문자열이나 정적 변수나..