하루 계획
⏲️ 공부 시간 : 11: 30 ~ 12 : 40
생각해보니까 나 어제 공부했는데 어제 코드카타는 업로드했는데 TIL을 업로드 안했음! ㄹㅈㄷ 건망증
근데 하루 지나서 올리는건 넘 짜치니까 어제꺼는 노션에 고이 모셔둬야징..
근데 코드카타26번만 TIL에 안올라가있으면 26번이 서운할 수도 있으니깐은
오늘 TIL에 껴서 올려줘야겠음
⏲️ 공부시간
1주차 | 14 : 00 ~ 15 : 00
2주차 | 15 : 00 ~ 16 : 30
3주차 | 16 : 30 ~ 18 : 10
강의 완료시 나는
강의 다 듣고 나 이렇게 됐는지 확인하기.
수업 진행 방식
배운 것
프로그래밍의 뜻 :
cooking → 음식을 만드는 것
programming → 프로그램을 만드는 것
쿠킹이 여러가지 식재료를 조합해서 음식을 만드는 행위라면
프로그래밍은 여러가지 명령어를 조합해서 프로그램을 만드는 행위
프로그래밍 언어 :
컴퓨터의 모국어는 2진수인데 사람은 2진수로 말하기 힘들어하니깐
사람의 말을 2진수로 번역해주기위한 언어
프로그래밍 언어의 종류가 나눠져있는 이유
특정한 목적에 적절하게 사용하기 위해서
앱/ 백엔드/ 데스크톱 프로그램을 개발하는데 쓰이는 언어
구글에서 안드로이드 앱 개발 시에 권장하는 언어 (2019년에 공식적으로 안드로이드 앱 개발 언어로 Kotlin을 채택했다)
Java의 단점을 개선한 언어( 타입추론기능, java에 비해 간결한 코드, 컴파일 시점에 null예외 미리 방지가능)
JVM 언어와 100% 호환되는 언어
직관적이고 간결한 문법
Null 처리에 높은 안정성
Kotlin을 사용하는 이유
라인 지우기 : Ctl + Y
라인 주석 처리 : Ctl + /
자동 포커싱 : Esc
프로젝트 전체 찾기 : Ctl + Shift + F
드래그 : shift + 방향키
문장 처음 / 끝 이동 : Home / End
다른 사람들이 알아보기 쉽게 코드를 작성하게 해주는 규칙
프로그래밍언어마다 규칙이 다르다.
코드의 가독성이 좋아져서 시간이 흐르고 봐도 쉽게 이해할 수 있음 → 유지보수 용이
협업 시에 좋다.
camelCase : 변수, 메서드의 이름을 지정할 때 사용
snake_case : 상수의 이름을 지정할 때 주로 사용
PasccalCase : 클래스 이름을 지정할 때 주로 사용
출력 : Output 프로그램에서 다른 장치로 데이터를 전송하는 행위
Ex ) 프로그램 → 모니터 / 프로그램 → 스피커 / 프로그램 → 메모장 / 프로그램 → USB
입력 : Input 다른 장치로부터 데이터를 불러와서 프로그램에서 확인하는 행위
Ex ) 프로그램 → 키보드 / 마이크 → 프로그램 /
프로그램의 모든 정보를 데이터/ 자료 라고 부른다.
자료를 저장할 수 있는 적절한 형태
컴퓨터의 하드웨어 사양이 한정적이기 때문에, 효율적으로 활용하기위함
(Int로 충분한데 Long을 사용하면 낭비다)
8비트 == 1바이트
변수(variable) : 변할 수 있는 값을 저장하는 장소
상수(value) : 변하지 않는 값을 저장하는 장소
+ 빼기 - 곱하기 * 나누기 / 나머지 %= 오른쪽의 값을 왼쪽에 대입한다 라는 뜻++ , --> < ≥ ≤ ==if
조건식에 해당하면 {}안의 코드를 실행
when
괄호안의 변수 가 해당하는 구간의 코드를 실행
for
for(요소 in 리스트){실행코드} : 리스트에서 하나의 요소들을 반복해서 가져오는 경우
for(인덱스 in 시작값 until 마지막값) : 숫자의 범위동안 반복하는 경우
while
while(조건식){실행할코드 , 증감식}
Object Oriented Programming
코틀린은 모든 것이 클래스 형태이므로 객체화 할 수 있다.
프로그램에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만든다.
객체들의 적절한 결합을 통해 유지 보수를 쉽게한다.
5대 키워드 : 클래스, 추상화, 캡슐화, 상속, 다형성
Method : 특정한 로직을 가지는 소스코드에 이름을 지어준 것
Method 의 기본구조
fun 메서드이름(변수명:자료형, ...) : 반환자료형 {
소스 코드
}
코드의 재사용성을 높이기 위해 사용한다.
반환자료형이 없을때는 Unit을 사용하는데 생략해도 무방함
코틀린에서 프로그램의 시작점은 main 메서드로 정해놨음
프로그램의 각 요소별 설계도
클래스 기본구조
Class 클래스이름 {
프로퍼티 1
프로퍼티 2
메서드 1
메서드 2
}
코틀린에서는 Class 키워드를 통해 클래스를 생성한다.’
클래스에는 프로퍼티와 메서드가 포함된다.
보통 하나의 파일은 한개의 클래스를 의미하지만, 하나의 파일안에 여러개의 클래스가 존재 할 수도있다.
클래스 종류
클래스를 실체화할 때 최초로 실행할 로직 작성
둘의 차이 : 클래스 옆에있냐 클래스 안에있냐
한가지 형태로 클래스를 실체화할 때 → 주 생성자
여러 형태로 클래스를 실체화할 때 → 보조 생성자
모든 인스턴스를 포함하는 개념
클래스 타입으로 선언된 것들을 객체 라고한다.
*인스턴스 클래스형태로 설계된 객체를 실체화한것
클래스간의 관계를 끈끈하게 만들어줌
공통적인 요소들이 있다면 부모 / 자식 클래스를 구분해서 상속 관계를 만들 수 있다.
코틀린은 open 키워드를 활용해서 상속관계를 만들 수 있다.
다형성을 구현 할 수 있다.
클래스의 내용을 변경해야하는 경우, 부모 클래스만 변경하는 것으로 공수를 줄일 수 있다.
부모 클래스의 프로퍼티, 메서드를 재설계하는 것
주로 메서드를 재설계한다.
공통적인 내용은 부모클래스에서 관리하면서 자식 클래스의 개성을 살릴 수 있다.
오버라이딩 단축키 : Ctl + O
super : 상속을 받으면 자동으로 생성되는 부모 객체
동일한 이름의 메서드를 여러 형태로 만드는 것
매개변수의 개수 / 자료형 을 다르게하면 동일한 이름으로 메서드를 만들 수 있다.
반환자료형은 오버로딩에 영향을 주지 않는다.
오버로딩이 필요한 예시
add 라는 메서드를 만들었음addInt , addDouble 로 만들면 나중에 관리가 힘들다.공통적으로 필요한 기능을 외부에서 추가하는것
interface 키워드를 사용해서 생성
interface 인터페이스이름 {
fun 메서드이름()
}
interface 상속 받는 방법
class 클래스이름(파라미터 : 자료형) : 부모클래스(파라미터) , 인터페이스이름{
overide fun 메서드이름() {
소스코드
}
}
인터페이스에는 추상메서드만 작성하는게 원칙이였지만, 최근에는 추상메서드가 아니여도OK
하지만 앵간하면 인터페이스에는 추상메서드를 작성하자.
*추상메서드 : 메서드의 로직이 존재하지 않고 이름만 있는 것
왜 상속으로 다 해결하지 않는가?
인터페이스가 필요한 예시
공부 후기
TIL 이렇게 길어진거 처음인 것 같은데
일단 너무 많은 내용을 한번에 공부해서 따로 개발공부정리 카테고리에 글로 정리하기가 애매했음!
개발 공부 정리에는 저 친구들 하나하나를 더 자세하게 적고싶어!
강의는 전체적인 코틀린 내용을 얕고 넓게? 핵심 위주로 알려주시는 느낌이였다.
아직까지는 나름 공부한 내용이 나와서 복습하는 느낌으로 딱 좋았당
근데 아예 생소한 내용이 나왔다면 조금 모자라다고 생각해서 따로 더 공부했을듯.
사실 3주차 내용은 아직 완벽하게 이해했다고 생각안되는 내용들이 있긴해서
다음에 복습하면서 다시한번 더 자세하게 공부하고 정리할예정!
(생성자, 객체, 상속, 오버라이딩, 오버로딩, 인터페이스)
대충은 아는데 아직 내가 완벽하게 이해한 느낌이 아니다.
⏲️ 공부시간 : 19 : 00 ~ 20 : 00
공부 계기
내배캠 1주차에 프로젝트를 진행하면서 내가 원하는 화면을 자유롭게 표현하려면
Android의 레이아웃을 빨리 공부해야겠다는 생각이 들어서 주말부터 Layout에 대한 공부를 시작함
나의 레이아웃 공부 방법
공부 내용 간단 정리
Android에 있는 모든 Layout에 대해서 하나하나 공부할 예정이지만
오늘은 TableLayout에 대해서 공부했다.
Tablelayout은 표를 제작할 수있는 레이아웃이다.
Tablelayout으로 표를 만드는 기본적인 방법은
Tablelayout을 먼저 생성해서 표를 만들겠다고 다짐하고
TableRow로 행을 추가해준다.
그리고 TableRow 안에 들어갈 다양한 View를 배치해주면된다.
배치된 뷰들은 각각 Cell이 된다.
행의 속성을 변경하고 싶을 때에는 각 행에 visibility, padding, margin, background등을 사용해주면되고, span으로 Cell을 병합해 줄 수도있다.
열의 속성을 변경하고 싶을 때에는 TableLayout의 고유 속성인 stretchColumns, shrinkColunmns, collapseColumns 등을 사용할 수 있다.
공부하면서 의아했던 점
행의 속성은 각 행에서 적용해야하고
열의 속성은 TableLayout에서 직접 적용하는게 좀 이상했다.
레이아웃에서 표를 작성할 일이 많이 없어서 조금 불편해도 따로 업데이트가 안되는건가?
아니면 이미 이게 개발짱짱맨 입장에서 제일 효율적인 방법인가?
⏲️ 20 : 00 ~ 20 : 40
내일부터 과제를 도전해봐야하는데 혼자서 할 수 있을까 모르겠음! 되겠지 머~
과제는 계산기 앱 만들기인데
이왕하는거 생긴 것도 예쁘게 만들고 싶어졌음
챗지피티한테 물어보니까 디자인 요소를 준비하고 UI 레이아웃을 구상하라함
코딩 공부한거 사용해보는게 주 목적인 과제일텐데 이렇게 UI만 생각하고있는거 맞나?
어차피 담주 월요일 제출이라 시간 많은데 머
근데 지금 과제 구현 기능 살펴보니까 선택구현기능까지 하려면 시간 안많을 거같긴함 ~
그래서 대충 계획을 짰음
6/3 월 : 문법 강의 듣기
6/4 화 : UI 구상 디자인요소 준비/ Layout 작성
6/5 수 : 기본 기능 구현 lv1, lv2
6/6 목 : 기본 기능 구현 lv3
6/7 금 : 추가 기능 구현 lv4
6/8 토 : 만약에 금요일까지 못한다면.. 짬처리
6/9 일 : 만약에 토요일까지도 못한다면.. 짬처리
재밌겠당~~~!