20230712 수 오늘의 공부
왕왕기초
컴파일
빌드
런타임
APK
소스 코드 작성에서 실행까지
소스코드작성 코틀린으로 소스 코드 작성
설치파일 생성 명형을 통해 안드로이드에서 실행될 수 있는 설치파일의 형태로 반환
업로드 구글 플레이 스토어에 앱을 업로드
앱등록 구글 플레이 스토어에 앱을 등록
앱선택/설치 구글 플레이 스토어에 접속한 다음 설치할 앱 선택/설치
스마트폰으로 실행 아이콘을 터치해서 앱을 실행
순서이다.
바이트 코드 : 우리가 작성한 코틀린 코드를 가상 머신인 안드로이드 헌타임에서 이해할 수 있도록 변환한 코드
APK : 안드로이드 패키지의 줄임말로 안드로이드 설치 파일의 확장자명으로 사용중
빌드build : 소스 코드를 변환해서 안드로이드의 실행 파일인 APK 파일로 만드는 것
소스코드를 기계어로 변환한 후 라이브러리와 연결해서 실제 실행 파일로 만드는 과정을 일컫는 용어이기도 하다.
컴파일 사람이 읽을 수 있는 형태의 소스코드를 컴퓨터가 읽을 수 있는 형태의 기계러오 변환해주는 과정
컴퓨터는 기계어만 이해하고 동작하는데 이 기계어의 구조를 사람이 이해나는 것이 어려워서 C, 자바 코틀린 같은 컴퓨터 언어가 생긴것
리눅스에서의 빌드
소스코드를 컴퓨타가 읽을 수 있는 기계어로 번역(컴파일)하고,
내가 만든 소스 코드에서 사용하는 라이브러리와 연결(LIne)해서 최종 실행 파일 형태로 만드는 것
안드로이드에서의 빌드
안드로이드에서는 리소스(Resource)라는 개념이 있다. 리눅스와 다르다
컴파일을 2번 한다. 1번은 바이트 코드 단계로 소스코드와 리소스(이미지파일,음악파일 등) 라이브러리까지 한번에 컴파일 해주고 이때 생선된 파일은 안드로이드 플랫폼에서 인식할 수 있는 바이트코드로 컴파일 된다.(이단계에서는 스마트폰에서 실행불가)
2번째는 APK 파일 생성단계로 1번에 의해 생성된 파일 APK 매니저 라는 도구로 개발자가 설정한 패스워드와 조합해서 설치 파일인 APK 파일로 만들어준다.
모두 해서 APK 파일이 생성되는 과정을 빌드라고 한다.
젯팩 Jetpack
라이브러리를 제공한다.
하위버전 호환성
반복되는 코드 제거
낮은 복잡도
약 90개정도의 라이브러리를 제공하는데
입문단계에 꼭 필요한 라이브러리는
Collection
ConstraintLayout
Fragment
RecyclerView
ViewPager2
Preference
Room 등이 아주 필요하다
뷰 바인딩 ViewBinding
뷰 객체에 접근하기 위해서는 findViewByld() 를 사용하였는데 안드로이는 이것을 떨쳐내고 (deprecate) 뷰 바인딩을 지원한다
코루틴 Coroutine
백그라운드 처리를 위해 사용되던 스레드(Thread)를 경량화한 코루틴이 제공된다
동시성 프로그래밍이 가능한 코루틴은 다른언어에서 이미 사용되고 있는 개념이며, 이를 Kotlin 코틀린에 도입한 것이다.
로그 Log
앱을 실행하면 많은 양의 로그가 생성된다.
원하는 로그를 찾기 위해서 안드로이드 스튜디오의 log 클래스를코드중간중간에 적절하게 사용해야 한다. 이는 앱 실행 흐름 혹은 결과값을 확인할 수 있다.
함수
v verbose 상세한 로그 내용을 출력하기 위해 사용
i information 정보성의 일반적인 메세지를 전달하기 위해 사용
d debug 개발에 필요한 내용을 출력하기 위해서 사용(개발자용)
w warning 에러는 아니지만 경고성 메세지를 전달하기 위해 사용
e error 실제 에러 메세지를 출력하기 위해 사용
log.d ("태그", "출력 메세지");
로그. d에 d는 debug 를 의미한다.
첫번째 인자 : 검색용도로 사용되는 태그
두번째 인자 : 실제 출력할 메세지 입력
로그:
코딩을 할 때 코드의 흐름을 파악하기 위해 앱 외부에 출력하는 정보
디버거를 사용할수도 있지만 매번 디버깅할 포인트를 지정해야 하는 불편함이 있는 반면 로그를 사용하면 한번 설정으로 항상 해당 코드의 흐름을 확인할수 있따.
로그캣:
logcat 출력되는 로그를 모아서 보는 도구.
내가 작성한 앱의 로그만 볼 수도 있고, 태그를 잘 활용하면 해당 태그를 필터로 사용해서 특정 로그만 확인할수도 있다.
변수:
값을 임시로 메모리(저장공간)에 저장하고 그 저장 공간에 이름을 부여한 것
이름과 값으로 구성되고, 변수에 이름을 부여하고 값을 입력하는 행위는 메모리의 특정 위치에 이름표를 붙이고 값을 담아두는 것과 같다.
메모리에 값을 입력하면서 이름표를 붙여두면 소스 코드에서 해당 값을 사용하고자 할 때 앞에서 붙였던 이름으로 사용 할 수 있다.
var 변수 선언방식
1. 변수 선언과 동시에 값 넣기
입력되는 값으로 타입을 추론할 수 있다.
타입: 문자, 숫자, 불리언 등
값이 입력되는 순간 해당 값의 형태(문자, 숫자, 불리언)로 변수의 타입이 결정된다.
var 변수명(이름) = 값
var myname = "홍길동"
2. 값으로 초기화하지 않고 선언만하고 사용
var 변수명: 타입
변수명 = 값
이방법은 변수명 옆에 :(콜론) 구분자를 붙여서 타입(자료형)을 지정해야 한다.
이렇게 두가지 방법으로 최초 선언시에 타입이 결정된다.
변수는 한번 타입을 결정하면 동일한 타입의 값만 담을 수 있다.
데이터 타입
숫자: 정수 Double, float, Long, Int, Short, Bite
문자: char 1개의 문자 'A' String 여러개의 문자 "ABCDE"
불리언형: Boolean true,false 두가지 값만 가진다. 조건문에서 많이 사용
기본 타입은 Int 이다.
Double 소수점 제일 많이 사용가능.
float 는 소수점인데 Double 와는 헷갈려서 맨 끝에 F 가 붙는다. 3.15454F
Int 는 정수값을 저장할 때 사용한다. 가독성을 위해 숫자 , 자리에 _를 넣어도 화면상에는 같이 표기 된다. 2147483647 = 2_147_483_647 <나타낼수있는 숫자
Long Int 보다는 큰 범위의 정수를 저장 할 수 있다. Int 와 구분을 위해서 맨 끝에 L 을 붙여준다.
short, Byte 정수값을 저장할때 사용하는데 Int 보다는 범위가 작습니다.
char 하나의 글자만 저정할수 있고 외따움표' ' 를 사용한다.
String 여러개의 문자를 지정할 수 있다. 모든 컴퓨터언어에서 가장 많이 사용된다.
Boolean 조건문에서 의사결정을 하기 위한 용도로 많이 사용한다. true, false 형태
문자열템플릿
+ 연산기호로도 하나로 합칠수 있고,
문자열 내부에서 달러($) 기호를 넣으면 해당 영역이 문자가 아닌 코드라는 것을 알려준다.
주의점 $ 다음에 이어지는 문자가 있다면 공백으로 코드가 끝났다는걸 알려줘야한다.
val 읽기정용 변수
한번 입력된 값은 변경 할 수 없다.
변하지 않는 값을 미리 입력해둘 때 사용한다.
val 변수 선언하기
val 변수명(이름) = 값
val roadName = "중앙대로"
var address = roadName = "7길"
const 상수
주로 기준이 되는 변하지 않는 값을 입력해둘때 사용한다.
읽기전용 변수인 val 앞에 const 키워드를 붙여서 만든다.
const val PI = 3.1415
val과 같이 읽기전용이지만 컴파일 시에 값이 결정되기 때문에 Int, Long 과 같은 기본현과 문자열인 String만 입력할 수 있따.
코딩 컨벤션 Coding Convention
최초 개발자와 유지보수 담당자가 다른 경우가 많아서 프로젝트별로 코드를 작성하는 규칙을 만드는 것.
명명규칙
캐멀 케이스 Camel Case MainActivity 띄어쓰기 부분에 첫단어 시작이 대문자로
스네이크 케이스 Snake case main_activity 띄어쓰기 부분에 _(언더 바 사용)
클래스명 첫글자 대문자에 대부분 소문자이용
class MainActivity 클래스명은 MainActivity 이다.
함수명 변수명 camel case (캐멀케이스)를 이용하는 경우가 많고, 첫글자는 대문자표기
상수명 const (변하지 않고, val과는 다른 형태)
상수명은 모두 대문자로 작성하는 경우가 많다.
이것은 모두 코딩컨벤션에 의해 회사마다 달라지는 경우도 있다.
다만 프로젝트가 캐멀이면 이 프로젝트는 캐멀로 주로 작성한다. 캐멀이 가독성이 좋아 인기가 있다.
들여쓰기 띄어쓰기 잘해야한다. 코딩 보기가 달라진다.
오늘 뒤늦게 메모장에 필기하면서 공부 한 것.
요 월화 작업하면서 현타를 블로그에 작성했는데
오늘 저녁쯤 이건 도저히 아닌 것 같아서 이야기했다.
제의를 했다. 프로젝트 좀 망쳐도 되면 그냥 이거 저 페이지 백지내자고,
아니면 다른 분이 이 페이지 개발하셔야 할 것 같다고,..
난 사실 내 수준을 알기위해서 그냥 백지내고 욕먹어도 내가 먹겠라는 생각이 드는 한편
팀이 괜히 있는게 아니니 어찌보면 다른분들이 욕을 먹 을수도 있겠구나 싶었다.
그래도 다들 마음이 넓으시고 이해를 해주셔서 다른 분이 하기로 했다.
나는 기본먼저 해야겠다.
어제 자료주신분이 다행히 좋은 분이라서
변명아닌 변명과 넋두리를 좀 들어주셨다.
물고기만 낚아주고 낚시 방법을 안 알려줬다고... OT 늦게 합류해서 비전공자에... 못 따라가겠다고
뱁새가 황새 따라가다 다리 찢어진다면서 에휴
그러니 공감해주시면서 다행히 어떻게 낚시하는지를 알려주시고
범위랄까 너무 깊이 파지말고 어느정도까지 알아야 하는지도 알려주셨다.
너무너무 감사합니다.
목표는 생겼다.
사실 2일동안도 내가 진짜 혼자 힘으로 한것은 디자인 색상넣거나 이런 부분밖에 없다.
서비스에 관해서는 모두 팀원들이 도와줬다.
근데 이걸 내가 다시 할려고하거나 좀 수정해야할때 어디를 건드려야 하는지를 몰라서 터졌다.
비전공자도 괜찮다고 해서 이 캠프에 왔는데 이런 생각도 들고 억울했다.
난 원래 기초가 아주 중요하다고 생각하는데 이게 맞나??? 이번 과제는 그래 도와줘서 어떻게 하겠는데
다음 꺼는 내가 따라 갈수 있을까 이런생각까지 들더군.
원래 개발자가 구글링으로 이렇게 하면서 복붙이라고는 했지만
뭐 클래스? 변수? 타입? 뭐 알아야 응용을 하든 뭐든 하지
에휴 아직도 넋두리네...
여튼 그래서 팀원분들의 허락으로 나는 이번주말까지 빡시게 공부한다.
과제가 이번주까지라서. ;;;
일정표상 다음주부터는 컴퓨터 언어에 대해서 배운다고 한다.
궁금하다. 과연 어떤것부터 공부하게 될까?
클래스? 이런것먼저 알려줬으면 좋겠다. 진심으로 진짜 간절하다. 난 내가 이해한게 맞는지 확인하는 작업이 시험이라고 생각되는데... 개발자는 좋은데 코딩은 짜놓고 내가 원하는 답 나오면 그게 내가 이해한것이지 않을까라는 마음이다.
다만 그 코딩을 조금이라도 작성할수 있다는 생각안에...
여튼 오늘은 공부한거 정리한거 올리는 날.
처음에는 내가 원래 필기하면서 외워서 필기장에 다 적었는데...
이제 나도 바뀌어야지!!! 해서 메모장에 마구 필기했다.
왕왕초보 개발자인데 열심히해서 잘하고 싶다. 나 혼자 뭔가 하나 아무도움없이 만들어보고 싶다!
Q. 변수를 왜 정의를 해야될까?
문자열템플릿에서 만약 내가 홍길동입니다. 이렇게 붙이고 싶으면 어떻게 작성을 해야될까?
log 는 여태 수업시간에 본적이 없는 것 같은데 저건 어디서 사용하는 것일까?
의문은 많지만 저번에 매니저가 묻는것보다 구글링 연습을 더 하라고 해서 묻기가 그렇네...요
전 앱개발자 공부중입니다.
언젠가 내가 기억에 남고 하면 이것에 대해서 답변을 내가 달수 있을까요?
'학원생활_진행중' 카테고리의 다른 글
첫주가 끝났다. (0) | 2023.07.14 |
---|---|
오늘 나는 무엇을 했을까? (0) | 2023.07.13 |
갑갑하다내스스로가 (0) | 2023.07.11 |
본격적인 시작. (1) | 2023.07.10 |
내가 잘못한 것 같은데 모르겠다. (0) | 2023.07.06 |