[내배캠 Android 4기] TIL 0603

오리너구리·2024년 6월 3일
0

TIL

목록 보기
23/48
post-thumbnail

하루 계획

  • 코드카타 27번
  • Android Layout 공부
  • 코틀린 문법 종합반 1 2 3 주차 학습

알고리즘 코드카타

⏲️ 공부 시간 : 11: 30 ~ 12 : 40

26번
https://velog.io/@orinugoori_art/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-CODEKATA-26-%EC%9D%8C%EC%96%91-%EB%8D%94%ED%95%98%EA%B8%B0-l3kmblsd

27번
https://velog.io/@orinugoori_art/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-CODEKATA-27-%ED%95%B8%EB%93%9C%ED%8F%B0-%EB%B2%88%ED%98%B8-%EA%B0%80%EB%A6%AC%EA%B8%B0

생각해보니까 나 어제 공부했는데 어제 코드카타는 업로드했는데 TIL을 업로드 안했음! ㄹㅈㄷ 건망증
근데 하루 지나서 올리는건 넘 짜치니까 어제꺼는 노션에 고이 모셔둬야징..

근데 코드카타26번만 TIL에 안올라가있으면 26번이 서운할 수도 있으니깐은
오늘 TIL에 껴서 올려줘야겠음


코틀린 문법 종합반 강의 학습

⏲️ 공부시간

1주차 | 14 : 00 ~ 15 : 00

2주차 | 15 : 00 ~ 16 : 30

3주차 | 16 : 30 ~ 18 : 10


1주차 Kotlin을 시작하기전 알아야할 내용

강의 소개

강의 완료시 나는

  1. 프로그래밍의 목적을 이해한다.
  2. Kotlin의 주요 문법을 활용할 수 있다.
  3. Kotlin의 특징을 설명 할 수 있다.
  4. Kltolin을 활용한 프로그램을 만들 수 있다.

강의 다 듣고 나 이렇게 됐는지 확인하기.

수업 진행 방식

  1. 필요한 이론 설명
  2. 실습을 통해 이론 이해 (Text RPG 제작)
  3. 필요시 개인과제로 응용력 키우기

프로그래밍이란?

배운 것

프로그래밍의 뜻 :

cooking → 음식을 만드는 것

programming → 프로그램을 만드는 것

쿠킹이 여러가지 식재료를 조합해서 음식을 만드는 행위라면

프로그래밍은 여러가지 명령어를 조합해서 프로그램을 만드는 행위

프로그래밍 언어 :

컴퓨터의 모국어는 2진수인데 사람은 2진수로 말하기 힘들어하니깐

사람의 말을 2진수로 번역해주기위한 언어

프로그래밍 언어의 종류가 나눠져있는 이유

특정한 목적에 적절하게 사용하기 위해서

Kotlin

앱/ 백엔드/ 데스크톱 프로그램을 개발하는데 쓰이는 언어

구글에서 안드로이드 앱 개발 시에 권장하는 언어 (2019년에 공식적으로 안드로이드 앱 개발 언어로 Kotlin을 채택했다)

Java의 단점을 개선한 언어( 타입추론기능, java에 비해 간결한 코드, 컴파일 시점에 null예외 미리 방지가능)

JVM 언어와 100% 호환되는 언어

직관적이고 간결한 문법

Null 처리에 높은 안정성

Kotlin을 사용하는 이유

  • 표현력이 높고 간결하다 → (상용구 코드를 적게 사용하면서 아이디어를 표현할 수 있다.)적은 노력으로 많은 작업을 할 수있다.
  • 더 안전한 코드 → null 포인터 예외 같은 일반적인 프로그래밍 실수를 방지해주는 여러 기능이 있어서 다운될 가능성이 낮다. →더욱 높은 품질의 프로그램을 제작할 수 있다.
  • 호환성 → 자바 프로그래밍 언어와 100% 호환된다
  • 구조화된 동시 실행 → 코루틴을 사용하여 비동기코드를 차단 코드처럼 쉽게 사용할 수 있다. 네트워크 호출부터 로컬 데이터 엑세스까지 백그라운드 작업관리를 단순화하고, 간결하고 안전하게 비동기 처리를 수행 할 수있다.

단축키

라인 지우기 : Ctl + Y

라인 주석 처리 : Ctl + /

자동 포커싱 : Esc

프로젝트 전체 찾기 : Ctl + Shift + F

드래그 : shift + 방향키

문장 처음 / 끝 이동 : Home / End


2주차 Kotlin 프로그래밍의 기초

코딩 컨벤션

다른 사람들이 알아보기 쉽게 코드를 작성하게 해주는 규칙

프로그래밍언어마다 규칙이 다르다.

코드의 가독성이 좋아져서 시간이 흐르고 봐도 쉽게 이해할 수 있음 → 유지보수 용이

협업 시에 좋다.

camelCase : 변수, 메서드의 이름을 지정할 때 사용

snake_case : 상수의 이름을 지정할 때 주로 사용

PasccalCase : 클래스 이름을 지정할 때 주로 사용

출력과 입력

출력 : Output 프로그램에서 다른 장치로 데이터를 전송하는 행위

Ex ) 프로그램 → 모니터 / 프로그램 → 스피커 / 프로그램 → 메모장 / 프로그램 → USB

입력 : Input 다른 장치로부터 데이터를 불러와서 프로그램에서 확인하는 행위

Ex ) 프로그램 → 키보드 / 마이크 → 프로그램 /

자료형

프로그램의 모든 정보를 데이터/ 자료 라고 부른다.

자료를 저장할 수 있는 적절한 형태

컴퓨터의 하드웨어 사양이 한정적이기 때문에, 효율적으로 활용하기위함

(Int로 충분한데 Long을 사용하면 낭비다)

8비트 == 1바이트

변수와 상수

변수(variable) : 변할 수 있는 값을 저장하는 장소

상수(value) : 변하지 않는 값을 저장하는 장소

연산자

  • 산술 연산자 : 더하기 + 빼기 - 곱하기 * 나누기 / 나머지 %
  • 대입 연산자 : = 오른쪽의 값을 왼쪽에 대입한다 라는 뜻
  • 복합 대입 연산자 : 산술연산자와 대입연산자의 역할을 합침
  • 증감 연산자 : 1씩 더하거나 뺄 때 사용 ++ , --
    • 변수의 왼쪽에 위치하면 전위 연산자, 오른쪽에 위치하면 후위 연산자라고한다.
    • 후위 연산자는 연산 실행 후에 증감한다.
    • 전위 연산자는 연산 실행 전에 증감한다.
  • 비교 연산자( 로직 연산자) : 두개의 변수, 상수의 관계나 값을 비교할 때 사용 , 결과는 참/거짓 이므로 Boolean 과함께 사용된다. > < ==

조건식

  1. if

    조건식에 해당하면 {}안의 코드를 실행

  2. when

    괄호안의 변수 가 해당하는 구간의 코드를 실행

반복문

  1. for

    for(요소 in 리스트){실행코드} : 리스트에서 하나의 요소들을 반복해서 가져오는 경우

    for(인덱스 in 시작값 until 마지막값) : 숫자의 범위동안 반복하는 경우

  2. while

    while(조건식){실행할코드 , 증감식}


3주차 객체 지향 프로그래밍 기초

객체 지향 프로그래밍

Object Oriented Programming

코틀린은 모든 것이 클래스 형태이므로 객체화 할 수 있다.

프로그램에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만든다.

객체들의 적절한 결합을 통해 유지 보수를 쉽게한다.

5대 키워드 : 클래스, 추상화, 캡슐화, 상속, 다형성

Method

Method : 특정한 로직을 가지는 소스코드에 이름을 지어준 것

Method 의 기본구조

fun 메서드이름(변수명:자료형, ...) : 반환자료형 {
소스 코드
}

코드의 재사용성을 높이기 위해 사용한다.

반환자료형이 없을때는 Unit을 사용하는데 생략해도 무방함

코틀린에서 프로그램의 시작점은 main 메서드로 정해놨음

Class

프로그램의 각 요소별 설계도

클래스 기본구조

Class 클래스이름 {
프로퍼티 1 
프로퍼티 2

메서드 1
메서드 2
}

코틀린에서는 Class 키워드를 통해 클래스를 생성한다.’

클래스에는 프로퍼티와 메서드가 포함된다.

보통 하나의 파일은 한개의 클래스를 의미하지만, 하나의 파일안에 여러개의 클래스가 존재 할 수도있다.

클래스 종류

  • 데이터 클래스 (Data Class)
    • 프로퍼티만 가지고 있는 클래스
    • 기본 생성자 + 한개이상의 매개변수를 가져야한다.
    • 유용한 메서드를 자동으로 만들어줌
      • hashCode() : 객체를 구분하기 위한 고유값 리턴
      • equals() : 동일한 객체인지 비교해서 true / false 리턴
      • copy() : 현재 객체의 모든 정보를 복사해서 새로운 객체 리턴
      • toString() : 현재 객체의 모든 프로퍼티를 출력
      • get()/set(매개변수) : 변수의 값을 리턴하거나 설정
  • 실드 클래스 (Sealed Class)
    • 클래스 상속과 관련된 개념
    • 무분별한 상속을 방지
  • 오브젝트 클래스 (Object Class)
    • 프로그램을 실행하는 동시에 인스턴스화

생성자

클래스를 실체화할 때 최초로 실행할 로직 작성

  • 기본 생성자
    • 위에서 만든 클래스처럼 만들면된다.
  • 명시적 생성자
    • 주 생성자 init : 클래스 호출할 때 최초로 init의 코드가 실행됨 반드시 Class의 매개변수랑 똑같이 받는 생성자만 만들수있음
    • 부생성자 Constructor : 매개변수를 따로따로 받는 생성자를 만들 수 있음

둘의 차이 : 클래스 옆에있냐 클래스 안에있냐

한가지 형태로 클래스를 실체화할 때 → 주 생성자

여러 형태로 클래스를 실체화할 때 → 보조 생성자

객체

모든 인스턴스를 포함하는 개념

클래스 타입으로 선언된 것들을 객체 라고한다.

*인스턴스 클래스형태로 설계된 객체를 실체화한것

상속

클래스간의 관계를 끈끈하게 만들어줌

공통적인 요소들이 있다면 부모 / 자식 클래스를 구분해서 상속 관계를 만들 수 있다.

코틀린은 open 키워드를 활용해서 상속관계를 만들 수 있다.

다형성을 구현 할 수 있다.

클래스의 내용을 변경해야하는 경우, 부모 클래스만 변경하는 것으로 공수를 줄일 수 있다.

오버라이딩

부모 클래스의 프로퍼티, 메서드를 재설계하는 것

주로 메서드를 재설계한다.

공통적인 내용은 부모클래스에서 관리하면서 자식 클래스의 개성을 살릴 수 있다.

오버라이딩 단축키 : Ctl + O

super : 상속을 받으면 자동으로 생성되는 부모 객체

오버로딩

동일한 이름의 메서드를 여러 형태로 만드는 것

매개변수의 개수 / 자료형 을 다르게하면 동일한 이름으로 메서드를 만들 수 있다.

반환자료형은 오버로딩에 영향을 주지 않는다.

오버로딩이 필요한 예시

  • 두개의 정수를 더하는 add 라는 메서드를 만들었음
  • 근데 실수를 더하는 메서드도 만들어야함
  • 두개의 메서드를 이름을 다르게 addInt , addDouble 로 만들면 나중에 관리가 힘들다.
  • 두개의 자료형이 다르기때문에 오버로딩으로 해결 가능~!

인터페이스

공통적으로 필요한 기능을 외부에서 추가하는것

interface 키워드를 사용해서 생성

interface 인터페이스이름 {
	fun 메서드이름()
	}

interface 상속 받는 방법

class 클래스이름(파라미터 : 자료형) : 부모클래스(파라미터) , 인터페이스이름{
	overide fun 메서드이름() {
	소스코드
	}
}

인터페이스에는 추상메서드만 작성하는게 원칙이였지만, 최근에는 추상메서드가 아니여도OK

하지만 앵간하면 인터페이스에는 추상메서드를 작성하자.

*추상메서드 : 메서드의 로직이 존재하지 않고 이름만 있는 것

왜 상속으로 다 해결하지 않는가?

  • 코틀린에서는 부모클래스는 한개뿐이라서
  • 근본적인 공통점은 상속을 받고, 추가적인 기능들은 인터페이스로 추가한다.

인터페이스가 필요한 예시

  • 상속으로 클래스들간의 관계를 구분했음
  • 닭, 참새, 비둘기 까지는 좋았는데 오리를 추가하려니까 어라라
  • 새는 보통 헤엄을 안치는데 오리시치는 헤엄도 칠줄암
  • 보통은 새가 헤엄안쳐서 부모클래스에 추가하기는 좀 그럼.
  • 그럴때 인터페이스 사용하면 해결~!

공부 후기
TIL 이렇게 길어진거 처음인 것 같은데
일단 너무 많은 내용을 한번에 공부해서 따로 개발공부정리 카테고리에 글로 정리하기가 애매했음!
개발 공부 정리에는 저 친구들 하나하나를 더 자세하게 적고싶어!

강의는 전체적인 코틀린 내용을 얕고 넓게? 핵심 위주로 알려주시는 느낌이였다.
아직까지는 나름 공부한 내용이 나와서 복습하는 느낌으로 딱 좋았당
근데 아예 생소한 내용이 나왔다면 조금 모자라다고 생각해서 따로 더 공부했을듯.
사실 3주차 내용은 아직 완벽하게 이해했다고 생각안되는 내용들이 있긴해서
다음에 복습하면서 다시한번 더 자세하게 공부하고 정리할예정!
(생성자, 객체, 상속, 오버라이딩, 오버로딩, 인터페이스)
대충은 아는데 아직 내가 완벽하게 이해한 느낌이 아니다.


Layout 공부

⏲️ 공부시간 : 19 : 00 ~ 20 : 00

공부 계기

내배캠 1주차에 프로젝트를 진행하면서 내가 원하는 화면을 자유롭게 표현하려면

Android의 레이아웃을 빨리 공부해야겠다는 생각이 들어서 주말부터 Layout에 대한 공부를 시작함

나의 레이아웃 공부 방법

  1. 먼저 공부할 레이아웃에 대해 자료를 찾아보거나 Chat GPT한테 자료를 보면서 명확하게 명시되지 않다고 생각되는 부분에 대해서 더블체크를 하면서 1차적으로 이해
  2. 개인 노션에 이해한 내용을 텍스트로 정리 (이 과정에서 안드로이드 스튜디오로 직접 Layout을 사용해보면서 내가 몰랐던 부분을 체크, 고유 속성들을 하나씩 사용해보기)
  3. 눈에 글이 안들어올 때나 따로 시간이 날 때 텍스트로 정리한 내용을 바탕으로 일러스트로 시각적인 자료를 제작하면서 복습
  4. 시각적 자료까지 완료되면 Velog에 다시 더 깔끔하게 정리해서 업로드

공부 내용 간단 정리

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 레이아웃을 구상하라함

  1. 계산기 UI를 구상해야겠음
    • 디스플레이 영역
    • 숫자버튼
    • 연산자 버튼
    • 기타 기능 버튼
  2. 디자인 요소 준비
    • 버튼
    • 배경
    • 폰트
    • 색상

코딩 공부한거 사용해보는게 주 목적인 과제일텐데 이렇게 UI만 생각하고있는거 맞나?

어차피 담주 월요일 제출이라 시간 많은데 머

근데 지금 과제 구현 기능 살펴보니까 선택구현기능까지 하려면 시간 안많을 거같긴함 ~

그래서 대충 계획을 짰음

과제 TimeLine 계획

6/3 월 : 문법 강의 듣기

6/4 화 : UI 구상 디자인요소 준비/ Layout 작성

6/5 수 : 기본 기능 구현 lv1, lv2

6/6 목 : 기본 기능 구현 lv3

6/7 금 : 추가 기능 구현 lv4

6/8 토 : 만약에 금요일까지 못한다면.. 짬처리

6/9 일 : 만약에 토요일까지도 못한다면.. 짬처리

재밌겠당~~~!


TMI

  • 오늘은 계획한대로 공부를 다했당 맨날 계획이랑 달라졌었는데
  • 오늘은 저녁안먹고 그냥 저녁시간에 누워있었음
  • 정해진 시간에 밥안먹고 걍 누워서 쉬는거는 입시 때 버릇인데 입시 때 샘한테 계획표 제출하고 계획표 시간대로 계획한 대로 연습한내용 영상보내고 밥도 계획한 시간에 먹었어야됐는데 너무 힘들어서 과자사와서 밥대신 먹고 누워있다가 잤음.
  • 이렇게 시간 정해서 공부 할 때는 밥해먹기도 너무 귀찮아서 편하게 먹을 수 있는거 안구비해두면 이렇게 굶게된당
  • 그냥 밥만 미리해두고 꺼내서 비벼서 5분안에 쳐먹을수있는걸 집에 항상 구비해야함
  • 그래야 5분만에 밥쳐먹고 누워있을 수 있다.
profile
오리너구리입니다

0개의 댓글