2024-01-16 TIL

agriades·2024년 1월 16일

devroid

목록 보기
3/6

14:07 HRD-net 수강신청이 되지 않아 질문을 남김
14:08 Kotlin 깃북 마저 읽기 시작함

Kotlin 깃북!

2. 안드로이드 아키텍쳐(이어서)

어제데이에 궁금했던 단어들: AOT, JIT 몰라몰라

AOT?

https://ko.wikipedia.org/wiki/AOT_컴파일 에서 AOT가 뭔지 읽어보기로 했다.

"AOT 컴파일(ahead-of-time compile)은 목표 시스템의 기계어와 무관하게 중간 언어 형태로 배포된 후 목표 시스템에서 인터프리터나 JIT 컴파일 등 기계어 번역을 통해 실행되는 중간 언어를 미리 목표 시스템에 맞는 기계어로 번역하는 방식을 지칭한다." 아 뭐래!

편의를 위한 중간 언어 + 시스템인가 보다. 어떤 언어는 영어로 중역하곤 하는 것처럼. 얘 덕분에, 조립컴을 회사 관계없이 세팅해도 전부 롤을 돌릴 수 있단다. 오예! 우선은 이 정도로 이해하고 넘어가자.

잠깐! 중요하지는 않지만 궁금한 것들

AOT_컴파일 위키피디아 주소를 그대로 복붙하면, '컴파일'이 '%EC%BB%B4%ED%8C%8C%EC%9D%BC'로 나온다. 이거 뭐라고 부르더라? 유니코드?

https://xeppetto.github.io/소프트웨어/Tools/20220417-웹브라우저-주소-복사-시-한글-깨질때 에서 친절히 설명해 주었길래 인용한다.

"웹브라우저 주소창의 인코딩이 UTF-8일 수 없어서 그렇다. 웹페이지의 본문에서는 UTF-8을 허용하지만, 웹브라우저의 주소창에서는 오로지 ASCII만 허용하기 때문에 나타나는 현상이다."

14:21 아 맞다, 지금 Kotlin에 대해 공부하고 있었지. 호기심 해결했으니 유턴합시다!

다시 깃북으로 돌아와서, JIT이 뭐지?

https://ko.wikipedia.org/wiki/JIT_컴파일 에선 이렇게 말했다.

"JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다." 최초의 JIT 컴파일러가 1960년쯤에 만들어졌다고 하니, 그럼 예전엔 미리 기계어로 다 써 뒀나 보다!

안드로이드 앱도 JIT 컴파일 과정을 거친다고 하니, 앱 버튼을 누르면 그 때 컴파일되는 거겠군. 약간 마감 전에 몰아서 하는 스타일인데? ㅋㅋ... 그러고 멍을 때림.

15:31 커피 사와서 다시 착석. 사전캠프는 4시간으로 짧으니 더 집중해보자!

빌드, 빌드 하는데 빌드가 뭐야

소스 코드가 결국 APK가 되기까지의 전 과정이래요.

1. (리눅스에서의) 빌드

  1. 컴파일: 소스 코드 > 기계어
  2. 링크(Link): 기계어 > 라이브러리
  3. 최종 실행 파일 생성

참고: 컴파일이란 (C, Python, Kotlin 같은) 소스 코드 > 기계어(0101...)로 변환하는 과정
궁금한 점: 리눅스에서 이야기하는 '라이브러리'가 뭐지? Phyton 라이브러리하고는 달라 보이는데!

2. (안드로이드에서의) 빌드: 리소스도 끼워줌!

  1. 컴파일: 소스 코드, 리소스(이미지, 음악 파일), 라이브러리 > 바이트 코드
  2. APK 파일 생성: APK 매니저 + 패스워드 > APK 파일

APK vs AAB

와 이거 궁금했어!
AAB: 제가 더 새로워요. 저로 스토어 등록하면 사용자들이 데이터를 절약할 수 있어요!
APK: 응 축하해

16:25 여태까지 적은 메모를 가독성 있게 정리함.

아키텍쳐가 뭐임?

앱... 실행!
앱 프레임워크
라이브러리 & 런타임 > JIT > 실행 파일 < AOT < APK
뭐시기 저시기(하드웨어 추상화 계층?)
리눅스 커널(OS)
휴대폰 하드웨어

깃북엔 이미지로 안드로이드 아키텍쳐가 설명되어 있는데, 글로도 정리해 보았다.
AOT(Ahead of Time, 시간 상관없이) = 설치 파일 일부가 한 번 더! 컴파일되는 형태.
5.0 롤리팝 시절에는 전부 JIT, 즉 설치 시 컴파일하기로 했는데 별로여서 하이브리드 됐대.

AOT만 쓰면 별로인 점: 사용속도는 빠르지만, 용량 개많이 차지함
JIT만 쓰면 별로인 점: 용량은 적게 차지하는데, 잠깐 버벅일 수 있음

16:40 호기심 해결했으니 오늘의 알고리즘 문제를 구경하러 감

두 수의 곱

왕창 실패한 내 코드는 이랬다.

class Solution {
    fun solution(num1: Int, num2: Int): Int {
        var answer: Int = 0
        
        if (num1 <= 100 && num1 >= 0 && num2 <= 100 && num2 >=0)
        {
           num1 * num2 = answer //우선 냅다 곱하고 보자구            
        }
        return answer
    }
}

엥? 왜 테스트에서 다 실패하지? 아 웁스!

answer = num1 * num2

가 되어야지! 우하학 my 실수~

궁금한 점: raw 코드도 Github 링크와 같이 공유해야 하는데, raw 코드를 달라고 하면 주석을 포함해서 주는 것이 일반적인가? 난 주석을 되게 주절주절 쓰는 스타일이라 조금 민망하단 말이야

오늘한 것을 내일로 미루지 않기(TIL)

웅 정말 맞는 말이야. 고용센터에 전화해야 하는데 전화가 무서워! #zillennials
내일배움지원카드를 갖고 있는데도 왜인지 수강신청이 되지 않아 관할 고용센터에 연락을 취해야 한다.

17:04 관할 고용센터가 어디인지 찾는 중... 카톡 간편인증을 이번 주에만 50번은 한 것 같다
17:13 상담 대기가 되게 길다... 내일 아침에 다시 전화해 봐야지.
17:19 배가 고픔

profile
안드로이드 앱 개발 공부 시작!

0개의 댓글