본문 바로가기

TIL

[TIL] 20230801 - 블로그 시작 등...

블로그 작성을 통해서 내가 배운내용 정리도 하고, 기록을 남겨두면 좋을 것 같아 블로그를 시작하게 되었다.

 

이미 국비지원 학원에서 몇 주 동안 강의를 듣고 있는 도중이라 당장 배우고 있는 내용들로 TIL을 작성하게 되면 순서가

안맞아 나중에 보기 불편할 수 있으니 당장은 복습하는 내용들이나 배우면서 생기는 오류들 부터 글을 작성하기로 계획했다.

 

블로그 글을 써 볼 생각도 안해봤고, SNS에 글쓰기도 안좋아해서 글을 안쓰다 보니까 막상 블로그를

어떻게 시작 해야할지 모르겠다. 생각 나는대로 써보면서 천천히 다듬어야겠다.

 

0. 블로그 화면이 너무 밝아서 다크모드 적용을 먼저 했다.

참고 블로그 https://comdori.tistory.com/130

 


오늘 복습내용

1. 매개변수

parameter를 지정할 때 초기값을 왜 지정해 주는지 생각해본 적이 없었고 어느 상황에 쓰이는지

생각 해보았다.

치킨집에서 일반적으로는 후라이드 주문이 많은 경우인 상황이라

치킨을 만드는 경우인 chicken 에 초기값으로 후라이드를 넣어놓고

다른 메뉴의 치킨을 만들때는 해당메뉴 값을 넣어줘서 만드는 경우로 만들어봤다.

fun main(
    fun chicken( manu :String = "후라이드", amount : Int = 380){
        println("${manu}치킨 용량 ${amount}")
    }
    chicken() // 초기 설정해준 값으로 나옴
    chicken("양념",390)
    // 출력
    // 후라이드치킨 용량 380
	// 양념치킨 용량 390
)

2. 반환함수

연산을 통해서 결과를 만들어 내는 것, 반환형을 입력해주어야 한다

무작위 20대가 주사위를 굴리는 경우를 만들어 보자

.random 함수를 사용해 컬렉션 안에서 무작위로 숫자를 추출할 수 있다.

빈 컬렉션에서 random()은 예외를 throw 한다고 한다, 그런 경우에는 randomOrNull() 을 이용해야 한다

fun main() {
    fun getRandomNum(min: Int = 1, max: Int = 6): Int {
        return (min..max).random()
    }
    println("무작위 20대 :${getRandomNum(min=20,max=29)}\n주사위 : ${getRandomNum()}")
}

3. 단일 표현식 함수

반환 유형을 명시적으로 선언하는 것은 컴파일러에서 유추할 수 있는 경우 선택사항이라고 한다.

fun getRandomNum(min: Int = 1, max: Int = 6) = (min..max).random()

 

 


 

오늘 있던 오류

내일배움캠프 2.5주차 개인과제를 시도해보다가 내 의도대로 작동이 되질 않아서 오랜 시간 매달렸던 문제다

A클래스 while(true) 문에서 .add 로 B 클래스에 있는 myCheckInDay 리스트에 추가를 했는데,

C 클래스에서 myCheckInDay.isNotEmpty 를 하면 false가 나와버린다.

해당 문제 코드

while (true) {
            try {
                var checkInDay: Int = readLine()!!.toInt()
                if (checkInDay < today) {
                    println("지난날은 체크인 할 수 없습니다. 오늘 날짜 :${LocalDate.now()}")
                } else {
                    myCheckInDay.add(checkInDay)
                    break
                }
            } catch (e: Exception) {
                println("날짜를 다시 입력해 주시기 바랍니다.")
            }
        }

class ReserveList() : MyInfo() {
    fun viewReserveList() {
        if (myCheckInDay.isNotEmpty()) {
            println("호텔 예약자 목록입니다.")
//            for (i in 0 until myCheckInDay.size) {
//                val item = myCheckInDay[i]
//                println("체크인 :  ")
//            }
        } else {
            println("예약된 방이 존재하지 않습니다.")
        }
    }
}

open class MyInfo {
    var myName: MutableList<String> = arrayListOf()
    var myWallet: Int = (50000 until 300000).random()
    var myCheckInDay: MutableList<Int> = arrayListOf()
    var myCheckOutDay: MutableList<Int> = arrayListOf()
    var myRoom: MutableList<Int> = arrayListOf()
}

 

어디서 문제가 생겼는지 감을 잡을 수 없어서 튜터님에게 도움을 받았다.

일단 Reservation 클래스 내의 함수에서 add.checkinday가 리스트에 추가가 되는지 확인을 위해서 

.add 뒤에 println("${myCheckInDay.size}") 로 추가가 되는지 확인 해보았다

실행하고 예약까지 진행하니 size 가 1 이라고 출력이 되어서

추가는 잘 되는 것으로 확인 되었다.

문제는

ReserveList 에서도 MyInfo 클래스를 상속받고, Reservation 에서도 MyInfo를 상속받는데

Reservation 에서 add. 를 하고 ReserveList 에서도 MyInfo에서 상속받은 myCheckInDay를 호출하니까

MyInfo 에서 정한 arrayListOf() 로 인해 List 안이 없는 상태로 불러 들어와 진 것 이었다

해결방법

MyInfo 를 클래스가 아닌 Object 로 변환하여 싱글턴 방식으로 처리하도록 하고

기존에 클래스에서 상속받는 것이 아닌, MyInfo.myCheckInDay 를 호출하였더니

정상적으로 (MyInfo.myCheckInDay.isNotEmpty())가 true 가 나왔다.

 

 

 

2.

 

안드로이드 UI 를 만지다가 이런 오류가 나왔다.

 

This&nbsp;view&nbsp;is&nbsp;not&nbsp;constrained.&nbsp;It&nbsp;only&nbsp;has&nbsp;designtime&nbsp;positions,&nbsp;so&nbsp;it&nbsp;will&nbsp;jump&nbsp;to&nbsp;(0,0)&nbsp;at&nbsp;runtime&nbsp;unless&nbsp;you&nbsp;add&nbsp;the&nbsp;constraints

제약조건이 없다라고 나와서 급하게 구글링을 해봤는데 해결이 간단하게 되었다

디자인 탭에 들어가서 빨간색 표시를 한 마술봉을 클릭하니까 해결이 되더라.

app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

텍스트뷰 안에 해당 소스가 추가 되고 오류가 해결 되었다.


새롭게 알게 된 내용

 

- object 

1. class 키워드 대신 object 키워드를 사용하여 클래스를 정의함과 동시에 객체를 생성한다.

2. object 는 클래스나, 인터페이스를 상속받을 순 있지만 클래스가 오브젝트를 상속받을 순 없다.

3. 프로퍼티, 메서드, 초기화 블록을 가질 수 있지만, 생성자는 가질 수 없다.

objectname. 으로 호출가능

 

 

오늘 느낀 점

- 블로그 글쓰기

오늘 문법과 UI강의와 서칭한 것들 보았던 건 참 많은데 막상 블로그에 적으려니까 적을 게 없다. 블로그에 글 작성하니

문제를 만났을 때와 그 문제를 해결한 뒤 그냥 해결하는 것으로 끝내는 것이 아니라 다시 한번 리마인드 하는 것 같아서 좋은 것 같다. 

오류 뿐만 아니라 문법과 UI 등도 다른 사람들이 이해하기 쉽게 설명할 수 있도록 해결하는 것에서 멈추지 말고 정확하게 이해해서 글 작성하면서 설명해보려고 노력이라도 해봐야겠다.

 

 

'TIL' 카테고리의 다른 글

[TIL] 20230809  (0) 2023.08.09
[TIL] 20230808 5일차  (0) 2023.08.08
[TIL] 20230804 - 4일차  (0) 2023.08.05
[TIL]20230803 - 3일차  (0) 2023.08.03
[TIL] 20230802 - 2일차  (0) 2023.08.02