Search

1조 멘토링 1주차 - 2

분류
기타
담당멘토
양민욱
멘토링 요청시간
2023/06/27 21:00
멘토링 시간
2023/06/27 21:10-22:10
멘토링방
멘토링룸1
배정상태
해결완료
비용지급
지급완료
번호
0
신청팀
기초멘토링팀
소요시간
1
작성자
천성민/차지훈
1.
fun main -> java에서의 public static void main 부분을 그냥 메서드로 처리하는게 맞는건지
Kotlin 파일에서 fun main 은 Java의 public static void main 처럼 진입점을 의미하는 함수가 맞습니다!
2.
fun 안에있는 변수는 어디 범위까지 유효한지
포함된 중괄호 범위까지라고 생각하시면 이해하기 쉽다.
1.
for의 다양한 형식들
for (i in 1..10) // kotlin은 for in 문법만 사용 가능하긴 하지만. List 처럼 iterator를 구현한 객체일 경우, forEach를 사용하는 경우도 많다. mutableListOf(0)`forEach { }
1-1. 04_funcion 68행에서 함수의 매개변수에 전달되는 값이 없다면 index에 선언한 값이 사용되어지고 전달값이 있다면 선언된 값이 아닌 전달된 값이 사용되어지는데 원리와 이유가 궁금합니다
Default 매개변수가 가능한 원리는 Java 파일로 컴파일 될 때, [Function]@Default 이름의 함수가 생성되어 값을 넘겨주지 않을 경우 기본값을 넣어주도록 구현되어 있는 것을 같이 확인했습니다 :)
Kotlin
복사
1-2. 그리고 디컴파일 할 경우 인자값에 2개의 정수형 변수가 추가적으로 생성되어있고 추가변수 중 1개는 생성자로 정의되어 나오는데 이 부분도 왜 이렇게 나오는지 궁금합니다
이 부분은… 답변을 못드렸습니다 흑흑 이유가 무엇일까요
------------------------------------------------
1.
05_IF 마지막 제어문코드에서 a7과 a9에 갑을 대입해주는데 a8을 선언해야 하는 이유가 있을까요?
a8을 지우고 a7과 a9를 넣어봤는데 작동이 되지 않았습니다
아무리 생각해봐도 변수에 값이 저장되기 때문에 변수의 재사용성과 관리성의 목적은 아닌 것 같은데 이유를 모르겠네요
a8 변수의 값은 반드시 선언해야할 필요성은 없지만, 로직이 복잡해지면서 중간에 오염되는 것을 방지해 선언되는 것에는 의미가 있는 것이 맞습니다!

멘토 답변

지난 시간에 배운 중첩 클래스, 익명 클래스에 대해 간단히 복습하는 시간을 가졌습니다.
준비해오신 질문에 대한 답변을 드리며, 성민님께서 정리하고 있으신 코틀린 문서를 보면서 리뷰하는 시간을 가졌습니다.
object와 class의 차이점을 알아보았습니다.
class A constructor(val b: Int = 10) // val a = A() // val a2 = A() // 객체를 무한히 생성할 수 있음 // oop //object class // 어플리케이션 내에 객체가 단 하나임을 보장하는 클래스 object B { const val ID = "id" }
Kotlin
복사
변수 선언하는 방법 중 지연 초기화에 대해서 간단히 알아보았습니다.
// lateinit var // 컴파일러한테 이 변수의 초기값은 내가 나중에 알아서 줄게~~ // lateinit var a: A = A()
Kotlin
복사
lateinit var는 Int, Long primitive Type에는 사용할 수 없는 것을 같이 확인했습니다
초기화를 하지 않고 사용할 경우 crash 발생하는 것을 같이 확인했습니다.
전역 변수와 지역 변수의 차이점을 간단히 비교하면서 지역 변수의 언제까지 메모리에 존재하는지 이야기를 나눴습니다
//지역 변수 : 클래스나 메소드 안에 있는 변수 // 쉽게 중괄호 안에서만 존재하는 변수 { 생명주기 } //전역 변수 : 클래스, 함수 밖에 선언되어서 전역으로 접근할 수 있는 변수
Kotlin
복사
Kotlin 디폴트 매개변수에 대해서 간단히 알아보았습니다.
test3(100) //a2 100을 넣고 싶었지만, a1에 들어가서 오류를 발생 fun test3( a1: Int = 100, a2: Int, // 필수값 a3: Int = 200 ){ println("test3 호출") println("a1 : $a1") println("a2 : $a2") } // 따라서 변수 이름을 지정하면서 값을 대입하는 습관을 들이면 좋다. // 나중에 코드 리뷰를 하면서 남이 코드를 읽을 때 가독성이 올라갈 수 있다. // 함수 호출에 전달된 매개변수 순서 그대로 들어간다.
Kotlin
복사
Named Argument 변수 이름을 지정하면서 값을 대입
kotlin lamda의 it에 대해서 간단히 알아보았습니다.
// (Int) -> Unit // 굳이 매개변수 이름을 굳이 명시하고 싶지 않으면 it을 사용하세요. (0..10).forEach { it -> //it은 생략 가능 print(it) } // 대신 주의, 입력 매개변수 개수는 한개
Kotlin
복사
상수에 대해서 간단히 알아보았습니다.
const val HEADER_DEVICE_ID = "HEADER_DEVICE_ID" //전역 변수와 유사하게 다른 파일에서 접근 가능
Kotlin
복사
String과 StringBuilder를 비교하며 알아보았습니다.
[b][c][][] StringBuilder("").apply { // 배열 append("a") // -> "a" append("b") remove(0) // 0번째 문자열을 제거 -> "" append("c") } // StringBuilder는 객체를 매번 생성하지 않고 String을 추가 가능 val a8 = "" a8 += "a" // String + 연산은 객체를 매번 생성하는 구조이기 때문에 메모리 성능 관점으로 비효율적
Kotlin
복사