Others
Computer Science of Others

💛 Machine Learning & Deep Learning

Machine Learning ✔

👉 컎퓚터가 학습할 수 있도록 하는 Ʞ술을 개발하는 AI의 한 분알
👋 Linear Regression, Decision Tree, Random Forest, etc


Deep Learning ✔

👉 여러 잵을 가진 읞공신겜망을 읎용한 뚞신러닝
👋 DNN, CNN, RNN, LSTM, etc


Gradient Descent Algorithm ✔

👉 cost륌 최소화하는 알고늬슘
👋 귞러한 W, b륌 ì°Ÿê³  갱신하는 맀컀니슘


Cost(Loss) Function ✔

👉 예잡 값곌 결곌 값의 찚읎 정도륌 알렀죌는 핚수
👋 cost(loss) : 예잡 값곌 결곌 값의 찚읎 정도륌 알렀죌는 값
👋 Hypothesis : 훈렚을 통핎 예잡한 방정식, 개념
  👋 H(x) = Wx + b ≈ H(X) = WX


Linear Regression

👉 ì–Žë–€ 한 변수에 여러 닀륞 변수듀읎 죌는 영향력을 선형적윌로 분석하는 학습 Ʞ법


Multi Variable Linear Regression

👉 각각의 변수에 여러 닀륞 변수듀읎 죌는 영향력을 선형적윌로 분석하는 학습 Ʞ법


Decision Tree

👉 음렚의 분류 규칙을 통핎 데읎터륌 분류하는 학습 Ʞ법
👉 overfitting 묞제가 잘 발생핚
👋 overfitting : 학습 결곌가 쀀비한 훈령 데읎터에서는 정확하지만 음반적읞 상황에서는 정확도가 현저히 떚얎지는 현상


Random Forest

👉 학습 곌정에서 구성한 닀수의 Decision Tree륌 읎용하는 학습 Ʞ법
👉 overfitting 묞제륌 í•Žê²°í•  수 있음


Clustering

👉 죌얎진 개첎듀을 여러 특성을 고렀핎 유사한 개첎끌늬 귞룹화하는 것


Regression 🆚 Classfication

👉 Regression
  👉 연속적읞 값을 예잡 (범위 Ʞ쀀 有)
👉 Classfication
  👉 읎산적읞 값을 예잡


Softmax Regression

👉 닀쀑 큎래슀 분류 묞제륌 핎결하는 학습 Ʞ법
👋 닀쀑 큎래슀 분류 묞제 : 3개 읎상 선택지 쀑 하나륌 택하는 묞제


Feed Forwarding

👉 신겜망에서 Input Layer부터 Hidden, Output layer륌 거쳐 출력되는 곌정


Backpropagation ✔

👉 Output layer에서부터 역방향윌로 펞믞분을 수행핎가며 weight, bias륌 갱신하는 것


Dropout

👉 overfitting을 방지하Ʞ 위하여 음부 데읎터륌 학습 데읎터에 포핚하지 않는 것


Regularization

👉 overfitting을 방지하Ʞ 위하여 weight륌 handling 하는 것


overfitting

👉 학습데읎터륌 곌하게 학습하여, 학습데읎터에서는 정확성읎 맀우 높윌나 읎왞 데읎터에 대핎서는 정확성읎 낮게 나였는 현상


DNN(Deep Neural Network) ✔

👉 읞공신겜망 구조에서 Hidden layer륌 2개 읎상윌로 많읎 구성하여 학습 결곌륌 향상시킚 딥러닝 알고늬슘
👋 닀륞 뚞신러닝 Ʞ법에 비핎 수치예잡에 강점읎 있윌며, Data가 많을수록 성능읎 향상
👋 Hidden Layer 복잡할수록 계산 시간 倚, weight 의믞륌 알Ʞ 얎렀워 결곌 핎석읎 얎렀움


CNN(Convolutional Neural Network) ✔

👉 데읎터의 특징을 추출하고 ê·ž 특징듀의 팚턎을 파악하는 딥러닝 알고늬슘
👋 읎믞지 처늬 작업에 강점읎 있음
👋 Convolution : 데읎터 각 성분의 읞접 특성을 고렀하여 하나의 특징윌로 도출하는 곌정
👋 Pooling : Convolution 곌정을 거친 layer의 사읎슈륌 쀄읎는 곌정


RNN(Recurrent Neural Network) ✔

👉 반복적읎고 순찚적읞 데읎터 학습에 특화된 딥러닝 알고늬슘
👉 읎전 정볎륌 현재 묞제 핎결에 있얎 활용할 수 있는데 읎는 낎부에 순환 구조가 포핚되얎 있Ʞ 때묞
👋 자연얎 처늬 분알에 강점읎 있음
👋 LSTM


LSTM(Long Short Term Memory)

👉 RNN의 Gradient Vanishing Problem을 극복하Ʞ 위핎 Hidden layer에 추가적윌로 logic을 구현한 딥러닝 알고늬슘
👋 GVP : backpropagation 곌정에서 gradient 값읎 소싀되얎 제대로 학습읎 되지 않는 묞제
✋ tanh륌 믞분한 값읎 1볎닀 ìž‘êž° 때묞에 곱하닀 볎멎 값읎 소싀됚
✋ 왜 relu 안 씀? 읎전 값읎 컀짐에 따띌 결곌가 발산할 수 있음
✋ 왜 sigmoid 안 씀? tanh가 backpropagation 좀 더 횚곌적


Q-Learning

👉 몚덞없읎 학습하는 강화 학습 Ʞ법
👋 강화 학습 : 시행착였륌 통핎 학습하는 방법
👋 ì–Žë–€ state에 대하여 ì–Žë–€ action을 적용하는 지에 따띌 reward가 죌얎지는데, 읎 reward륌 최대화하Ʞ 위한 방향윌로 학습읎 진행됚


DQN(Deep Q-Learning)

👉 심잵신겜망을 읎용하는 Q-Learning



💛 Kotlin

fun

👉 핚수 ì„ ì–ž
✋ fun main(){..}


Unit

👉 void 개념곌 대응
👋 특수한 객첎륌 반환
👋 void는 아묎 것도 반환하지 X


val 🆚 var

👉 val
  👉 불변형
👉 var
  👉 가변형
👋 자료형을 자동윌로 추론
👋 but, 반드시 값읎 할당되얎알 핹
✋ val c = 100 (O)
✋ val num (X)
➕ val vs const?
  👉 val: 런타임에 상수 결정
  👉 const: 컎파음타임에 상수 결정


NPE(Java, Kotlin) ✔

👉 자바에선 컎파음 타임에 null을 잡을 수 없고, 런타임에서 null을 잡아 NPE 발생
👉 윔틀늰에선 컎파음 타임에 ìž¡êž° 위핎 닀음곌 같은 방법을 고안핚


Kotlin null ✔

👉 Kotlin 변수 Ʞ볞적윌로 non-null
👋 NPE륌 믞늬 방지할 수 있음
👉 ? Ʞ혞륌 명시하여 nullable
👉 섞읎프 윜 (?.) : str?.length
  👉 null or str.length 출력
👉 non-null ë‹šì • (!!.) : str!!.length
  👉 NPE or str.length 출력
👉 엘비슀 연산자 (?:) : str?.length ?: -1
  👉 -1 or str.length 출력


Array 🆚 List

👉 Array
  👉 사읎슈 변겜 불가능
  👉 원소 직접 변겜 가능
  👋 arr[0] = 5 (O)
👉 List
  👉 읜Ʞ 전용, 사읎슈 변겜 가능
  👉 원소 직접 변겜 불가능
  👋 arr[0] = 3 (X)
  👉 MutableList
    👉 사읎슈 변겜 가능
    👉 원소 직접 변겜 가능
    👋 arr[0] = 1 (O)
    👋 ArrayList : MutableList


슀윔프 핚수

👉 특정 객첎의 컚텍슀튞 낎에서 특정 동작(프로퍌티 쎈Ʞ화/활용)을 싀행하Ʞ 위한 목적 만을 가진 핚수
👉 5가지의 종류
  👉 apply
    👉 apply 핚수 낎의 몚든 명령듀읎 수행되고 나멎 ê·ž 명령듀읎 적용되얎 새로 생성된 읞슀턎슀륌 반환
    👉 슀윔프 낎에서 this ì°žì¡° 연산자륌 사용 (생략 가능)
  👉 run
    👉 run 핚수 낎의 몚든 명령듀읎 수행되고 나멎 슀윔프 낮 마지막 띌읞의 싀행 결곌 값을 반환
    👉 슀윔프 낎에서 this ì°žì¡° 연산자륌 사용 (생략 가능)
    👉 확장 핚수 형태로 사용
  👉 with
    👉 with 핚수 낎의 몚든 명령듀읎 수행되고 나멎 슀윔프 낮 마지막 띌읞의 싀행 결곌 값을 반환
    👉 슀윔프 낎에서 this ì°žì¡° 연산자륌 사용 (생략 가능)
    👉 수신 객첎륌 파띌믞터로 받아 사용
  👉 also
    👉 also 핚수 낎의 몚든 명령듀읎 수행되고 나멎 ê·ž 명령듀읎 적용되얎 새로 생성된 읞슀턎슀륌 반환
    👉 슀윔프 낎에서 it ì°žì¡° 연산자륌 사용 (생략 불가능)
  👉 let
    👉 let 핚수 낎의 몚든 명령듀읎 수행되고 나멎 슀윔프 낮 마지막 띌읞의 싀행 결곌 값을 반환
    👉 슀윔프 낎에서 it ì°žì¡° 연산자륌 사용 (생략 불가능)


람닀식 ✔

👉 음꞉ 객첎 특징을 가진 읎늄 없는 핚수
👋 읞자로 전달 가능
👋 반환 값에 사용 가능
👋 변수에 닎을 수 있음
👋 핚수형 프로귞래밍에서 자죌 쓰임
👋 val square : (Int) -> (Int) = {number -> number * number}
👋 val square = {number: Int -> number * number}
👉 윔틀늰 및 안드로읎드에서 왜 쀑요할까?
  👉 펞늬하Ʞ 때묞
  👉 method가 당 하나 뿐읞 자바 읞터페읎슀에 대핮 람닀식을 사용하여 윔드륌 간결하게 적용할 수 있음


Class init

👉 쎈Ʞ화 랔록
👉 죌 생성자 생성시 같읎 생성됚
👉 슉, 쎈Ʞ에 싀행됚


상속

👉 부몚 큎래슀 앞 open 킀워드륌 붙임
👉 자식 큎래슀는 동음
👉 final을 핎제하는 개념
👋 code

open class Human(val name: String = "Jordan") {
        // 죌 생성자 및 default

        constructor(_name: String) {
                name = _name
        }
        // 부 생성자

        init {
                println("Hello")
        }
        // 쎈Ʞ화 랔록

        open fun sing() {
                println("lalala")
        }
        // overriding 허용

        final fun dance() {
                println("yeyeye")
        }
        // overriding 불가
}

class Korean : Human() {
        override fun sing() {
                super.sing()
                // 부몚 큎래슀
                println("띌띌띌")
        }
        // overriding

        override fun sing() {
                println("띌띌띌")
        }
        // Error
}


지연 쎈Ʞ화

👉 lateinit
  👉 var로 선얞된 프로퍌티만 가능
  👉 프로퍌티 게터 및 ì„ží„° 사용 불가
👉 lazy
  👉 val로 선얞된 프로퍌티만 가능
  👉 혞출 시점에 by lazy { } 정의에 의핎 랔록부분 쎈Ʞ화 진행
👉 객첎 생성곌 동시에 쎈Ʞ화하Ʞ 힘든 겜우에 사용


추상큎래슀 🆚 읞터페읎슀 🆚 데읎터큎래슀(kotlin) ✔

👉 추상큎래슀
  👉 추상 메소드륌 포핚한 큎래슀
    👉 추상 메소드?
      👉 선얞만 있고 볞첎는 구현되지 않은 메소드
      👉 자식 큎래슀에서 반드시 였버띌읎딩을 핎알만 사용할 수 있음
  👉 하위 큎래슀에서 구첎화할 필요가 있음
  👉 extends 킀워드 사용, 닀쀑 상속 구현 불가능
👉 읞터페읎슀
  👉 몚든 메소드가 추상 메소드읞 겜우
  👉 댈대만 있윌며 구현하는 몚든 큎래슀에 대핮 강제적윌로 메소드륌 구현하도록 만듬
  👉 implements 킀워드 사용, 닀쀑 상속 구현 가능
👉 데읎터큎래슀
  👉 데읎터 저장에 쎈점을 맞추Ʞ 위핎 윔틀늰에서 특별히 고안된 큎래슀
  👉 큎래슀 낎용을 쉜게 확읞 가능


Companion Object 🆚 static

👉 윔틀늰에서는 정적 변수륌 사용할 때 자바에서 사용하던 static 킀워드가 없는 대신 Companion Object륌 제공핚
👉 C.O.는 큎래슀 생성 시 자동윌로 동반되얎 생성되는 객첎
👉 엄밀히 말하자멎 C.O.는 static곌는 닀륎며, 사용하는 입장에서 static 처럌 볎읎는 것음 뿐임
  👉 변수나 메서드륌 접귌할 때 축앜 표현 Ʞ능윌로 읞핎 마치 static곌 동음핎 볎읎지만 사싀은 .Companion읎띌는 킀워드가 생략된 것


@annotation

👉 윔드에 부가적읞 정볎륌 추가하는 역할
👉 @JvmStatic
  👉 companion에 등록된 프로퍌티륌 자바에서 static곌 같읎 사용할 수 있도록 하는 얎녞테읎션
  👉 자동적윌로 getter/setter 핚수륌 생성하도록 핹
👉 @JvmField
  👉 윔틀늰 컎파음러가 핎당 프로퍌티에 대핮 자동적윌로 getter/setter 핚수륌 생성하지 않도록 하는 얎녞테읎션


윔룚틎 ✔

👉 윔틀늰에서 Ʞ볞윌로 제공하는 Ʞ능
👉 동시성 프로귞래밍을 가능쌀 하도록 하는 개념
👉 비동Ʞ 겜량 슀레드띌고 요앜 가능
👉 띌읎람러늬에 추가하여 사용
👉 Context Switching읎 없고 최적화된 비동Ʞ 핚수륌 통핎 비선점형윌로 작동
👉 Non-Blocking or 비동Ʞ 윔드륌 마치 동Ʞ 윔드처럌 쉜게 작성읎 가능


윔룚틎 구조 ✔

👉 윔룚틎 슀윔프
  👉 윔룚틎읎 동작하는 범위륌 규정
    👉 CoroutineScope
      👉 지정된 윔룚틎 컚텍슀튞륌 감싞는 윔룚틎 범위륌 만듩
    👉 GlobalScope
      👉 독늜형 윔룚틎을 구성, 생명죌Ʞ는 프로귞랚 전첎에 핎당하는 범위
👉 윔룚틎 컚텍슀튞
  👉 윔룚틎은 항상 특정 컚텍슀튞에서 싀행되며, ì–Žë– í•œ 컚텍슀튞에서 싀행될 지 디슀팚처가 결정
    👉 Dispatchers.Main
      👉 죌로 UI ꎀ렚 작업을 수행할 때 사용
    👉 Dispatchers.Default
      👉 죌로 CPU 자원을 많읎 필요로 하는 작업을 수행할 때 사용
    👉 Dispatchers.IO
      👉 죌로 파음 IO나 넀튞워크 윜을 수행할 때 사용
👉 윔룚틎 빌더
  👉 윔룚틎을 시작하는 방법을 뜻핚
    👉 launch
      👉 음닚 싀행하고 잊얎버늬는 형태의 윔룚틎윌로 메읞 프로귞랚곌 독늜되얎 싀행할 수 있음
      👉 Ʞ볞적윌로 슉시 싀행하며 랔록 낎의 싀행 결곌는 반환하지 X
    👉 async
      👉 비동Ʞ 혞출을 위핎 만든 윔룚틎윌로 결곌나 예왞륌 반환핹


윔룚틎 플로우 🔥

👉 닀쀑 데읎터륌 순찚적윌로 방출하는 데읎터 슀튞늌을 위핎 제공



💛 Android

View

👉 쉜게 말핮, UI 구성 요소


ViewGroup

👉 View륌 여러개 포핚하고 있는 것, ë·° 귞룹 낎에서 뷰의 위치륌 지정


View의 생명죌Ʞ

👉 Constructor
  👉 몚든 뷰는 생성자에서 출발하는데, 생성자륌 쎈Ʞ화하는 닚계
👉 onAttachedToWindow
  👉 부몚 뷰가 혞출하여 자식 뷰가 윈도우에 붙게됚, 읎제 뷰의 id로 ì ‘ê·Œ 가능
👉 onMeasure
  👉 뷰의 크Ʞ륌 확읞하Ʞ 위핎 혞출됚
👉 onLayout
  👉 뷰의 크Ʞ와 위치륌 할당핚
👉 onDraw
  👉 뷰륌 싀제로 귞늬는 닚계
  👉 Canvas(뷰의 몚양)와 Paint(뷰의 색깔) 큎래슀륌 읎용
  👉 빈번히 혞출되므로 메서드 낎의 객첎 할당을 플하고, 한 번 할당한 객첎륌 재사용할 것을 권장
👉 invalidate
  👉 닚순히 뷰륌 닀시 귞늎 때(text나 color 변겜), onDraw 재혞출
👉 requestLayout
  👉 onMeasure 부터 닀시 뷰륌 귞늎 때(size 변겜)
➕ View 렌더링 속도륌 개선하는 방법은?
  👉 onDraw 메서드의 로직을 첎크


Layout

👉 View 배치 방식
  👉 LinearLayout
    👉 한 방향윌로 View륌 쌓는 layout
  👉 ConstraintLayout
    👉 직접 View의 위치륌 섀정하는 layout
  👉 RelativeLayout
    👉 특정 View와의 상대적읞 위치륌 읎용핎 위치륌 결정하는 layout
  👉 TableLayout
    👉 표나 엑셀 시튞와 같은 형태로 화멎을 구성하는 layout
  👉 FrameLayout
    👉 읎 layout에 View륌 넣윌멎 ê·ž 쀑 하나의 View만 화멎에 표시
👋 gravity : 정렬


R.java

👉 늬소슀륌 만듀멎 R.java 파음에 상수 변수로 등록되며 윔드에서 읎륌 읎용
👉 슉, 안드로읎드 늬소슀륌 식별하Ʞ 위한 변수듀을 ꎀ늬하는 R 큎래슀


dp 🆚 sp

👉 dp
  👉 핎상도에 따띌 px 값 계산
👉 sp
  👉 Ꞁꌎ 크Ʞ, 닚말의 섀정을 따멄


margin 🆚 padding

👉 margin
  👉 View 영역 테두늬 Ʞ쀀 바깥쪜 여백
👉 padding
  👉 View 영역 테두늬 Ʞ쀀 안쪜 여백


EditText inputType

👉 입력되는 Ꞁ자의 유형 정의
  👉 킀팚드가 닀륎게 올띌였는 것을 확읞할 수 있음


당말 방향 전환 ✔

👉 onPause() ➡ onStop() ➡ onDestroy() ➡ onCreate() ➡ onStart() ➡ onResume()
👉 액티비티가 메몚늬에서 없얎졌닀가 닀시 만듀얎짐
👉 layout-land 폎더에 xml 파음을 새롭게 구성핎알 핹
👉 onSaveInstanceState 윜백 메서드륌 통핎 변수 값을 저장
👉 액티비티가 종료되Ʞ 전 상태륌 저장
👉 onCreate()에서 번듀 객첎로 복원
👋 가로, ì„žë¡œ 액티비티가 닀륌 수 있Ʞ 때묞
👉 액티비티 동음, 화멎 레읎아웃만 바꟞고 싶닀멎?
  👉 맀니페슀튞 파음의 < activity > 태귞 안에 configChanges 속성에 orientation | screensize 섀정
  👉 ê·ž 후 onConfigurationChanged() 메서드 재정의


토슀튞 🆚 슀낵바

👉 ê°„ë‹ší•œ 메시지륌 잠깐 볎여쀬닀가 없얎지는 ë·°
👉 Toast
  👉 앱 위에 떠있는 뷰
👉 SnackBar
  👉 아래쪜에서 올띌왔닀 낎렀가는 ë·°


Inflation ✔

👉 앱읎 싀행되얎 xml 레읎아웃 낎용읎 메몚늬에 객첎화 되는 곌정
👋 객첎화된 xml 레읎아웃을 소슀 파음에서 사용하여 출력핚


LayoutInflater ✔

👉 xml 늬소슀륌 view 객첎로 만듀얎 반환하는 역할


TextWatcher 🔥

👉 EditText의 addTextChangedListener()메서드와 핚께 Text 변겜 Event 처늬


nine-patch 🔥

👉 읎믞지가 닀양한 화멎 크Ʞ의 여러 닚말Ʞ에 출력될 때 자동윌로 크Ʞ가 늘얎나거나 쀄얎듀며 읎믞지의 몚서늬 부분읎 깚지거나 왜곡읎 발생하는데, 읎륌 핎결핎죌는 방법
👉 확장자 앞에 .9륌 붙임
👉 가로, 섞로가 2px씩 큰 읎믞지륌 새로 만듀고 원볞 읎믞지륌 가욎데에 복사하멎 생성 완료
👉 흰색; 늘얎나지 않는 영역, 검정색; 늘얎나는 영역윌로 구분


안드로읎드 Ʞ볞 구성요소 4가지 ✔

👉 앱을 섀치했을 때, 안드로읎드 시슀템읎 읎 구성요소듀에 대한 정볎륌 요구핚
👉 1. Activity
  👉 화멎을 구성하는 컎포넌튞
  👉 액티비티 맀니저띌는 객첎에 의핎 액티비티 슀택읎띌는 것윌로 ꎀ늬됚
👉 2. Service
  👉 백귞띌욎드 작업을 하는 컎포넌튞
  👉 메읞 액티비티에서 startService() 메서드 혞출
  👉 비정상적윌로 종료되얎도 시슀템읎 자동 재싀행
  👉 stopService() 메서드륌 혞출하여 싀행 서비슀륌 종료할 수 있음
  👉 칎톡읎 싀행되얎있지 않아도, 화멎상에 볎읎지 않아도 메시지륌 받을 수 있는 읎유
  👋 IntentService : 백귞띌욎드에서 싀행되지만 한 번 싀행되고 끝나는 서비슀
👉 3. Broadcast Receiver
  👉 시슀템 읎벀튞가 발생할 때 싀행되게 하는 컎포넌튞
  👉 ꞰꞰ안에서 동작하는 닀륞 앱 A로 부터 특정 메시지륌 받Ʞ 위핎 앱에 읎 람로드캐슀튞 수신자륌 등록하멎 A 앱의 메시지가 앱윌로 전달됚
  👉 registerReceiver() 메서드로 시슀템에 등록
👉 4. Content Provider
  👉 앱의 데읎터륌 공유하는 컎포넌튞
  👉 앱의 볎안 때묞에 쀑요한 구성요소
  👉 볎통 DB, 파음, SharedPreferences륌 ì ‘ê·Œ
  👉 허용한 통로로 접귌하Ʞ 위핎서는 Content Resolver띌는 객첎륌 읎용핎알 핹
👉 읎 정볎듀은 전부 맀니페슀튞 파음에 있음


Service 종류

👉 Foreground
  👉 사용자에게 눈에 띄는 음부 작업을 수행하는 서비슀
👉 Background
  👉 사용자가 직접 알지 못하는 작업을 수행하는 서비슀
  👉 API 26 Deprecated
  👉 대신, 백귞띌욎드 처늬에 권장되는 API읞 Jetpack의 WorkManager 사용을 권장
👉 Bind
  👉 바읞딩된 서비슀는 구성 요소가 서비슀와 상혞 작용할 수 있음


Application Class

👉 몚든 안드로읎드 구성요소에서 ì ‘ê·Œ 가능한 전역 큎래슀


맀니페슀튞 파음 ✔

👉 4가지 Ʞ볞 구성요소, 앱 팚킀지 읎늄, 권한 등 앱에 대한 필수적읞 정볎가 듀얎있는 파음


Task 제얎

👉 액티비티륌 싀행하닀 볎멎 발생하는 액티비티 쀑복묞제나 흐늄을 제얎하는 것
👉 맀니페슀튞 파음의 activity 태귞의 launchMode륌 섀정하는 방법
  👉 standard
    👉 액티비티 슀택에 계속 쌓아올늬는 몚드
  👉 singletop
    👉 슀택의 최상위에 있는 액티비티륌 닀시 혞출 시 읎는 슀택에 쌓읎지 X
    👉 나뚞지는 standard와 동음
    👉 닀시 혞출 시 onNewIntent() 싀행
  👉 singletask
    👉 새롭게 task륌 생성하고 핎당 task의 룚튞에 액티비티가 졎재하게 됚
    👉 닀륞 액티비티륌 혞출할 겜우 읎 룚튞의에 쌓읎게 됚
  👉 singleinstance
    👉 singletask와 마찬가지로 task의 룚튞에만 졎재할 수 있지만, 하나의 task에 하나의 액티비티만 졎재할 수 있음
👉 Intent의 Flag 정볎륌 섀정하는 방법
  👉 SINGLE_TOP
    👉 슀택의 최상위에 있는 액티비티륌 닀시 혞출 시 읎는 슀택에 쌓읎지 X
  👉 NO_HISTORY
    👉 읎 속성윌로 섀정된 액티비티는 슀택에 쌓읎지 X
  👉 CLEAR_TOP
    👉 읎 속성윌로 섀정된 액티비티부터 가장 위에 있는 액티비티까지 몚두 종료
    👉 읎후, 읎 액티비티륌 활성화하여 가장 위에 위치하도록 핹


Bundle

👉 읞텐튞 안에 있는 객첎
👉 부가 데읎터륌 넣거나 뺄 수 있음


Context

👉 현재 사용되고 있는 App에 대한 포ꎄ적읞 정볎륌 지니고 있는 객첎


Intent ✔

👉 앱 구성 요소 간에 작업 수행을 위하여 시슀템에 정볎 전달 역할을 수행하는 메시지 객첎
👉 Action + Data
👉 수행할 Ʞ능 + 수행할 대상 정볎


Activity LifeCycle ✔

👉 액티비티가 생성, 음시정지, 재생, 정지, 재개, 종료되는 등의 상태 변화와 귞에 따륞 윜백 메서드륌 쎝칭


👉 New ➡ Run
  👉 onCreate() ➡ onStart() ➡ onResume()
👉 Run ➡ Pause
  👉 onPause()
👉 Pause ➡ Run
  👉 onResume()
👉 Pause ➡ Stop
  👉 onStop()
👉 Stop ➡ Run
  👉 onRestart() ➡ onStart() ➡ onResume()
👉 Stop ➡ End
  👉 onDestroy()

👉 1. onCreate()
  👉 액티비티 처음 생성될 때 혞출
  👉 읎전에 저장된 정볎가 있닀멎 번듀을 찞조하여 복원 가능
👉 2. onStart()
  👉 액티비티가 화멎에 볎읎Ʞ 직전에 혞출됚
  👉 화멎 상에 액티비티가 정상적윌로 볎읞닀멎 onResume() 혞출됚
👉 3. onResume()
  👉 액티비티와 사용자가 상혞작용하Ʞ 바로 직전에 혞출됚
👉 4. onPause()
  👉 액티비티 포컀싱을 잃은 상태가 되었을 때 혞출됚
  👉 읎 메서드가 늬턎하Ʞ 전에는 닀음 액티비티는 시작될 수 없Ʞ에 맀우 빚늬 수행된 후 늬턎되얎알 핹
👉 5. onStop()
  👉 액티비티가 소멞되거나 또닀륞 액티비티가 화멎을 가렀 사용자에게 더 읎상 완전히 볎읎지 않을 때 혞출됚
👉 6. onRestart()
  👉 onStop() 읎후 닀시 시작되Ʞ 바로 직전에 혞출됚
👉 7. onDestroy()
  👉 소멞되얎 없얎지Ʞ 전에 혞출되며, 액티비티가 받는 마지막 혞출읎 됚
👉 8. onSaveInstanceState()
  👉 파띌믞터로 전달되는 번듀 객첎륌 읎용하여 데읎터륌 저장
  👉 onPause() 전 혞출됚
👉 9. onRestoreInstanceState()
  👉 번듀에 저장된 데읎터륌 읎용하여 onCreate 혹은 읎곳에서 복원
  👉 onStart()와 onResume() 사읎에 혞출


Fragment ✔

👉 부분 화멎을 위한 레읎아웃
👉 레읎아웃읎나 소슀 윔드륌 한 번만 정의하여 여러 액티비티에서 재사용할 수 있도록 만든 것
👋 윔드가 복잡핎지는 것을 방지하Ʞ 위핎 각 부분 화멎의 윔드륌 분늬시킎
👋 현재는 닚순히 화멎 UI륌 위핎 많읎 활용하는 레읎아웃
👉 프래귞뚌튞는 항상 액티비티 위에 올띌가 있얎알 핹
👋 제대로 동작하는 시점 : 프래귞뚌튞가 메몚늬에 만듀얎진 시점 X, 액티비티에 올띌가는 시점
👉 프래귞뚌튞 맀니저가 프래귞뚌튞듀을 ꎀ늬
👋 읞텐튞는 시슀템을 읎핎하는 방식읎므로 프래귞뚌튞와 액티비티 사읎에서 전달하는 것은 바람직하지 않음
👉 프래귞뚌튞와 액티비티 간 데읎터 전달은 닚순히 메서드륌 만듀고 혞출하는 방식윌로 진행
👉 액티비티에 추가하는 방법
  👉 뷰와 마찬가지로 xml 레읎아웃에 < fragment > 태귞 추가
  👉 소슀 윔드에서 프래귞뚌튞 맀니저륌 읎용
👉 프래귞뚌튞륌 전환하는 횚곌
  👉 프래귞뚌튞 맀니저륌 읎용하여 액티비티에서 전환을 처늬
  👋 프래귞뚌튞 ꎀ늬륌 액티비티에서 하Ʞ 때묞
  👋 프래귞뚌튞가 직접 프래귞뚌튞륌 띄우는 것읎 X
  👋 액티비티륌 통핎 띄워알 핹


Fragment LifeCycle ✔

👉 프래귞뚌튞가 액티비티에 올띌가며 음얎나는 상태 변화와 귞에 따륞 윜백 메서드륌 쎝칭


👉 New ➡ Run
  👉 onAttach() ➡ onCreate() ➡ onCreateView() ➡ onActivityCreated() ➡ onStart() ➡ onResume()
👉 Remove or Replace Fragment (not using Back stack)
  👉 onPause() ➡ onStop() ➡ onDestroyView() ➡ onDestroy() ➡ onDetach()
👉 Remove or Replace Fragment (using Back stack)
  👉 onPause() ➡ onStop() ➡ onDestoryView()
👉 Restore Fragment (using Back stack)
  👉 (onDestroyView ➡) onCreateView() ➡ onActivityCreated() ➡ onStart() ➡ onResume()

👉 1. onAttach()
  👉 프래귞뚌튞가 액티비티와 연결될 때 혞출됚
👉 2. onCreate()
  👉 프래귞뚌튞가 쎈Ʞ화될 때 혞출됚
  👉 new 연산자륌 읎용핎 새로욎 프래귞뚌튞 객첎륌 만드는 시점읎 X
👉 3. onCreateView()
  👉 프래귞뚌튞와 ꎀ렚된 ë·° 계잵을 만듀얎서 늬턎핚
👉 4. onActivityCreated()
  👉 프래귞뚌튞와 연결된 액티비티가 onCreate() 메서드의 작업을 완료했을 때 혞출됚
👉 5. onStart()
  👉 프래귞뚌튞와 연결된 액티비티가 onStart() 되얎 사용자에게 프래귞뚌튞가 볎음 때 혞출됚
👉 6. onResume()
  👉 프래귞뚌튞와 연결된 액티비티가 onResume() 되얎 사용자와 상혞작용을 할 수 있을 때 혞출됚
👉 7. onPause()
  👉 프래귞뚌튞와 연결된 액티비티가 onPause() 되얎 사용자와 상혞작용을 쀑지할 때 혞출됚
👉 8. onStop()
  👉 프래귞뚌튞와 연결된 액티비티가 onStop() 되얎 화멎에 더 읎상 볎읎지 않을 때 혞출됚
👉 9. onDestroyView()
  👉 프래귞뚌튞와 ꎀ렚된 ë·° 늬소슀륌 핎제할 수 있도록 혞출됚
👉 10. onDestroy()
  👉 프래귞뚌튞의 상태륌 마지막윌로 정늬할 수 있도록 혞출됚
👉 11. onDetach()
  👉 프래귞뚌튞가 액티비티와 연결을 끊Ʞ 바로 직전에 혞출됚
👉 onPause()와 onStop() 메소드는 액티비티의 onPause()와 onStop() 메서드가 혞출될 때와 같은 상태 메서드
👋 Back stack : 프래귞뚌튞가 화멎에 볎읎지 않는 순간 제거가 아닌 저장했닀 닀시 읎용할 수 있게 하는 Ʞ능


Permission

👉 특정 Ʞ능을 수행하Ʞ 위하여 사용자의 요청을 받는 것
👉 음반 권한 + 위험 권한
👉 위험 권한은 개읞정볎랑 연ꎀ읎 되얎 있윌므로 항상 죌의


Application 구성

👉 자바 윔드 + 늬소슀 파음
👉 자바 윔드 : 앱의 흐늄곌 Ʞ능을 정의
👉 늬소슀 파음 : 레읎아웃/읎믞지 처럌 볎여죌Ʞ 위핎 사용하는 파음 및 데읎터륌 ꎀ늬


Android 빌드 프로섞슀 🔥

👉 안드로읎드 컎파음러가 소슀 윔드륌 DEX 파음로 변환하고, 늬소슀륌 컎파음된 늬소슀로 만듩
👉 읎후, Packager가 DEX 파음곌 컎파음된 늬소슀륌 결합하여 APK or AAB로 만듩
👉 구Ꞁ 플레읎 등의 마쌓에 배포할 수 있도록 서명하는 절찚륌 거친 후 APK or AAB 형태로 슀토얎에 업로드


DVM (Dalvik VM) 🔥

👉 안드로읎드에서 띌읎섌슀 및 메몚늬 횚윚성 묞제로 JVM 대신 사용하는 가상 ëšžì‹ 
👉 JVM곌 DVM; 몚두 JIT 컎파음러륌 사용하여 Ʞ계얎로 번역
  👉 JIT(Just-In-Time) 방식?
  👉 앱 구동 쀑에 싀시간윌로 컎파음을 진행하여 섀치 속도가 빠륎지만, 싀행 속도가 느늬닀는 특징을 갖고 있음
  👉 Trace-JIT 방식?
  👉 프로귞랚 싀행 시 자죌 사용되는 부분의 바읎튞 윔드륌 Ʞ계얎로 믞늬 핎석핎 결곌륌 캐시에 저장하여 성능을 향상한 JIT 방식


ART (Android RunTime) 🔥

👉 Ʞ졎의 DVM의 한계점을 핎결하Ʞ 위핎서 구Ꞁ에서 새로 개발한 런타임
👉 례늬팝 버전부터 대첎됚
  👉 AOT(Aheads-Of-Time) 방식?
  👉 섀치 시 컎파음을 진행하여 섀치 속도가 느늬지만 싀행 속도가 빠늄
👉 누가 버전 읎후 ART는 AOT와 JIT 컎파음러륌 탑재하여 섀치 속도 및 싀행 속도 몚두륌 볎완핚


Gradle ✔

👉 소슀 윔드 파음 및 늬소슀 파음을 빌드하거나 배포하Ʞ 위핎 사용되는 빌드 및 배포 도구
👉 프로젝튞 수쀀의 귞래듀 섀정 파음
  👉 프로젝튞 안에 있는 몚든 몚듈에 적용되는 섀정읎 듀얎있음
  👋 음반적윌로 읎 파음은 거의 수정을 하지 않음
👉 몚듈 수쀀의 귞래듀 섀정 파음
  👉 각각의 몚듈에 적용되는 섀정읎 듀얎있음
  👉 빌드에 필요한 쀑요 정볎듀읎 듀얎있음
  👋 dependencies에는 왞부 띌읎람러늬 추가
  👋 새로욎 몚듈을 추가한닀멎, ê·ž 몚듈에 대한 build.gradle 파음로 새로 추가 됚
👉 setting.gradle
  👉 앱을 빌드할 때 ì–Žë–€ 몚듈을 포핚할 것읞지에 대한 정볎가 있음
👋 몚듈 : 소슀파음 및 빌드 섀정윌로 구성된 몚음


Jetpack ✔

👉 androidx띌는 팚킀지명윌로 시작하며, 개발자듀읎 쉜고 빠륎게 퀄늬티가 좋은 앱을 만듀수 있도록 도와죌는 띌읎람러늬 몚음
👋 appcompat, recyclerview, viewpager2, drawerlayout, fragment
👋 appcompat : 안드로읎드 앱의 API 레벚 혞환성 묞제륌 í•Žê²°í•Ž 쀌
👋 viewpager2 : 옆윌로 swipe하는 layout ꎀ렚 띌읎람러늬
👋 drawerlayout : 안 볎읎닀가 swipe하멎 등장하는 layout ꎀ렚 띌읎람러늬


RecyclerView ✔

👉 여러 가지 아읎템을 나타낮는 멎에서 ListView와 비슷한 View
👉 메몚늬륌 횚윚적윌로 사용하도록 캐시 맀컀니슘을 구현
👋 ViewHolder, Adapter, LayoutManager
👋 ListView 대신 사용하는 것을 권장
  👋 가로/ì„žë¡œ 방향 몚두 지원
  👋 아읎템 애니메읎션 처늬 큎래슀 있음
  👋 ViewHolder 팚턎을 사용하여 findViewById() 혞출 횟수 낮음


SharedPreferences ✔

👉 앱을 만듀멎서 데읎터륌 간닚하게 저장하고 사용하고 싶을 때 사용하는 Ʞ능
👉 앱 낎부에 파음을 하나 만듀얎 데읎터륌 저장하거나 읜얎였는 방식


SQLite ✔

👉 표쀀 SQL을 지원하며, 조회 속도가 빠륞 몚바음 데읎터베읎슀
👋 슀킀마륌 업데읎튞할 때, SQLiteHelper 큎래슀 사용


Thread & Handler & Looper (Deprecated) ✔

👉 멀티 Thread륌 읎용할 겜우 사용자가 만든 Thread가 UI 객첎에 접귌하Ʞ 위하여 Handler 객첎륌 읎용
👉 UI ꎀ늬하는 메읞 슀레드와 늬소슀 동시 접귌윌로 읞한 DeadLock읎 발생할 수 있윌므로
👉 핞듀러는 메섞지륌 전달하Ʞ 위핎 메섞지 큐에 찚례로 넣는데, Looper가 뜑아서 메읞 슀레드에게 전달


Glide 🆚 Volley 🆚 Gson

👉 Glide
  👉 읎믞지 처늬륌 위핎 만듀얎진 띌읎람러늬
👉 Volley
  👉 웹 요청곌 응답을 닚순화하Ʞ 위핎 만듀얎진 띌읎람러늬
👉 Gson
  👉 Json 묞자엎을 자바 객첎로 변환할 수 있도록 하는 띌읎람러늬


알늌 (배너)

👉 NotificationManager 시슀템 서비슀 + NotificationCompat.Builder() 메서드 사용



💛 Others

Callback 핚수

👉 ì–Žë–€ 읎벀튞에 의핎 혞출되얎지는 핚수


Serializable(자바 표쀀 읞터페읎슀) 🆚 Parcelable(안드로읎드 sdk 낮 읞터페읎슀)

👉 객첎의 직렬화는 객첎의 낎용을 바읎튞 닚위로 변환하여 파음 또는 넀튞워크륌 통핎서 슀튞늌 형태로 전송하는 것
👉 직렬화 사용 읎유는 전송 방법에 신겜 ì“ž 필요 없읎 최종 목적지에 전달된 객첎륌 바로 사용하멎 되Ʞ 때묞
👉 ì–Žë– í•œ 객첎륌 직렬화하Ʞ 위핎서는 Serializable 읞터페읎슀륌 구현만 하멎 되Ʞ에 쉜게 데읎터륌 전달할 수 있음
👉 음반적윌로, 안드로읎드에서 Serializable읎 Parcelable 볎닀 성능읎 좋지 않아 Parcelable을 사용
  👉 Parcelable읎 성능읎 더 좋은 읎유는 프로섞슀 간 통신을 사용하Ʞ 때묞
  👉 또한, Serializable 낎부에서 늬플랙션을 사용하여 직렬화륌 처늬하Ʞ 때묞
    👉 늬플랙션? 구첎적읞 큎래슀 타입을 알지 못핎도 ê·ž 큎래슀의 메소드, 변수듀에 접귌할 수 있게 핎죌는 자바 API
    👉 늬플랙션은 처늬 곌정에서 많은 추가 객첎륌 사용하Ʞ 때묞에 읎는 읎후 가비지 윜렉터의 고도한 동작윌로 연결되얎 성능 저하가 알Ʞ됚
👉 But, 반드시 Parcelable가 Serializable볎닀 성능적윌로 우수한 것은 아님
  👉 추가적읞 로직을 구현한 Serializable 읞터페읎슀는 Parcelable볎닀 성능읎 우수핚
👉 따띌서, 상황에 맞게 잘 사용하는 것읎 쀑요핚


Java 장/닚점

👉 JVM의 GC가 자동윌로 메몚늬륌 ꎀ늬핎쀀닀는 장점
👉 ꎀ렚 띌읎람러늬 API륌 사용하여 멀티슀레드륌 쉜게 구현 가능하닀는 장점
👉 읞터프늬터 방식읎Ʞ에 비교적 속도가 느늬닀는 닚점


Java Thread

👉 자바에는 프로섞슀가 없윌며 슀레드만 졎재, JVM읎 OS 역할


Java 프로귞랚 싀행 곌정 🔥

👉 프로귞랚읎 싀행되멎 JVM은 OS로부터 프로귞랚읎 필요로 하는 메몚늬륌 할당받음
👉 컎파음러가 소슀윔드(.java)륌 자바 바읎튞 윔드(.class)로 변환
👉 JVM읎 바읎튞 윔드륌 Ʞ계얎로 변환하고 읞터프늬터 방식윌로 애플늬쌀읎션 싀행
  👋 Class Loader륌 통핎 class 파음듀을 JVM윌로 로딩
  👋 Execution Engine을 통핎 로딩된 class 파음듀, 슉, 바읎튞 윔드륌 바읎너늬 윔드로 변환
  👋 핎석된 바읎튞 윔드는 Runtime Data Area에 배치되얎 싀질적읞 수행읎 읎뀄짐
    👋 Method Area : 몚든 Thread에 공유, 큎래슀/변수/static/상수 정볎 등읎 저장되는 영역
    👋 Heap Area : 몚든 Thread에 공유, new 명령얎로 생성된 읞슀턎슀/객첎가 저장되는 영역
    👋 Stack Area : 각 Thread마닀 하나씩 저장, 맀개변수/지역변수 등읎 저장되는 영역
    👋 PC Register : 각 Thread마닀 하나씩 저장, CPU Register와 역할 비슷
    👋 Native Method Stack : 각 Thread마닀 하나씩 저장, 닀륞 얞얎의 메서드 혞출을 위핎 할당되는 영역
👉 싀행곌정 속에서 JVM의 필요에 따띌 Thread Synchronization & GC 와 같은 ꎀ늬 작업을 수행


AJAX(Asynchronous Javascript And Xml) 🔥

👉 큎띌읎얞튞와 서버간에 정볎륌 비동Ʞ적윌로 전달하Ʞ 위핎 JavaScript에서 사용하는 하나의 띌읎람러늬


jQuery 🔥

👉 웹 사읎튞에서 JavaScript륌 쉜게 활용할 수 있도록 도와죌는 였픈소슀 Ʞ반의 JavaScript 띌읎람러늬


React 🔥

👉 UI륌 만드는데 사용되는 였픈소슀 Ʞ반의 JavaScript 띌읎람러늬


Vue.js 🔥

👉 웹 앱의 UI륌 만듀Ʞ 위핎 사용하는 였픈소슀 프로귞래시람(자유도가 높은) JavaScript 프레임워크



*****
NOT A TALENT ❎ NOT GIVING UP ✅
CopyRight ⓒ 2022 DCherish All Rights Reserved.