오늘은 3월 5일부터 3월 8일까지 Kotlin 문법 기초, 계산기를 만들어보는 과제를 하게 되었습니다.
📑과제 내용
과제 내용은 이렇습니다.
[ 과제내용은 더보기 클릭 ]
Lv3 까지는 쉽게 잘 해결했지만 Lv4의 추상클래스를 개념만 알고 넘어갔지 실제로 사용해 본 적이 없어 많이 어려웠습니다.
Lv4 까지는 하고싶었기에 추상클래스의 개념부터 다시 짚고 넘어가 보니 추상클래스란 "미완성 설계도"이며 상속을 통해서만 사용할 수 있다는 것을 알게 되었습니다.
즉, 일반적인 클래스와 달리 객체를 직접 생성할 수 없고 추상클래스(abstract class)는 상속되어 재정의 하는 것만 가능하다는 것이었습니다.
개념과 사용예시를 보니 생각보다 쉽게 Lv4까지 진행할 수 있었습니다.
밑에는 Lv4까지 진행한 초기 제출코드입니다.
[ 초기 제출 코드 더보기 클릭 ]
class Calculator {
}
fun main() {
// Lv4 abstrct
println("첫번째 값을 입력해주세요.")
var inputNum1 = readLine()!!.toInt()
println("두번째 값을 입력해주세요.")
var inputNum2 = readLine()!!.toInt()
println(
"연산자 옵션을 선택해주세요." +
"\n1 = 더하기, 2 = 빼기, 3 = 곱하기, 4 = 나누기"
)
var add = AddOperation().operation(inputNum1, inputNum2)
var sub = SubstractOperation().operation(inputNum1, inputNum2)
var mul = MultiplyOperation().operation(inputNum1, inputNum2)
var div = DivideOperation().operation(inputNum1, inputNum2)
while (true) {
var selectOperation = readLine()!!.toInt()
if (selectOperation == 1) {
println(add)
break
} else if (selectOperation == 2) {
println(sub)
break
} else if (selectOperation == 3) {
println(mul)
break
} else if (selectOperation == 4) {
println(div)
break
} else {
println(
"1부터 4까지의 숫자만 입력해주세요." +
"\n1 = 더하기, 2 = 빼기, 3 = 곱하기, 4 = 나누기"
)
continue
}
}
}
// 추상 class
abstract class AbstractOperation {
abstract fun operation(a: Int, b: Int): Int
}
// 덧셈 class
class AddOperation : AbstractOperation() {
override fun operation(a: Int, b: Int): Int {
return a + b
}
}
// 뺄셈 class
class SubstractOperation : AbstractOperation() {
override fun operation(a: Int, b: Int): Int {
return a - b
}
}
// 곱셈 class
class MultiplyOperation : AbstractOperation() {
override fun operation(a: Int, b: Int): Int {
return a * b
}
}
// 나눗셈 class
class DivideOperation : AbstractOperation() {
override fun operation(a: Int, b: Int): Int {
return a / b
}
}
그리고 3월 8일 금요일 대망의 피드백시간..!
📗피드백
처음으로 피드백을 받아봤는데 뭔가 이 피드백에 감동을 받았습니다.
왜냐하면 꽤 많은 수강생들의 코드를 하나하나 피드백을 해주셔야 할 텐데 피드백에서 저의 코드를 성심성의껏 봐주신 것을 느꼈기 때문입니다!
어쨌든! 지금부터 피드백을 받은 것을 토대로 저의 문제점을 하나하나 따져보겠습니다.
첫 번째
깃 커밋내용은 의미 있는 내용으로 작성을 하면 좋겠다는 피드백이었습니다.
실제로 저는 github를 통해 제출을 할 때 아래 사진처럼 간단하게 작성하여 제출했었습니다.
그저 과제 제출용 이였기에 모두 다 Lv4 까지 했다는 표시와 gitignore를 수정했다는 간략한 제목 느낌으로 commit을 하게 되었었습니다.
이번 피드백으로 느낀 점이 다른 것보다도 "gitignore fix"에서 문제가 발생했다고 생각이 듭니다.
최근 불필요한 파일들은 gitignore를 통해 제거해야 된다는 것을 느꼈고 해당 내용을 수정했다는 의미에서 내용을 간단하게 했었습니다.
하지만 어떤 것들을 적용하였는지 좀 더 구체적으로 적을 필요가 있었습니다.
두 번째는.. 무엇이었을까? 먼가 숫자 하나가 빠져있습니다.
그럼 넘어가서
세 번째
if문대신 Kotlin의 when절을 사용하여 완성해 보라는 피드백이었습니다.
이 피드백이 저의 정곡을 찌르게 되었습니다.
사실 Java에서 Kotlin으로 넘어오면서 when이 switch와 개념이 같다는 건 알았지만 if문이 쓰기 편하여 항상 if문만 사용해 왔습니다. 이번 기회에 when을 연습해 보는 또 좋은 기회가 된 것 같았습니다ㅎ
네 번째
사용하지 않는 클래쓰는 삭제하라고 하셨는데 여기서 아차! 싶었습니다.
이번 과제를 할 때 IntelliJ에서 만들고 제출은 AndroidStudio로 하게 되었는데 여기서 문제가 발생했던 것이었습니다.
( 제출은 AndroidStudio로 제출했어야 했음 )
IntelliJ에서는 프로젝트를 만들면 class외부에 main 함수를 만들고 그 안에다가 코드를 작성했어야 하는데 AndroidStudio에서는 그렇지 않았던 것이었습니다.
이 점을 잘 확인했어야 하는데.. 다음부터는 정말 꼼꼼히 잘 확인해 보고 제출하려고 합니다!
다섯째
하나의 코틀린 파일에 class를 두지 말고 class를 따로따로 나눠서 관리하라는 피드백을 받았습니다.
사실 저 역시 따로따로 나눌까 하다가 코드를 간결하게 짜서 하나에 두는 것이 더 보기 편할 것 같다고 생각을 했었는데 이번 문제의 의도를 잘 파악하지 못했던 것 같습니다.
문제, 과제의 의도를 파악하는 것도 정말 중요하다고 생각합니다. 다음번엔 의도를 잘 파악해서 그것에 충족하여 과제를 제출해야 할 것 같습니다.
여섯째
가독성을 위해 라인정렬이 필요하다는 피드백을 받았습니다. 이때도 아차! 싶었습니다.
IntelliJ에서 이미 라인정렬을 해주는 단축키가 있습니다. 바로 Ctrl+Shift+Alt+L (Windows)입니다.
다음부터는 이 단축키 역시 잘 활용해야 할 것 같습니다!
3월 10일 오늘
이 피드백들을 받고 나서 다시 개선하여 제출을 하게 되었습니다. 한번 더 피드백시간이 있다면 튜터님 의도에 맞게 잘 개선이 되었는지 월요일 또다시 피드백을 받을 생각에 너무 기대가 됩니다!
밑에는 피드백을 토대로 다시 제출한 계산기 수정 코드입니다.
해당 코드를 보고 싶다면 아래 더 보기를 클릭해 주세요!
[ 더보기 클릭! ]
Calculator.kt
fun main() {
// Lv4 abstrct fix
println("첫번째 값을 입력해주세요.")
val inputNum1 = readLine()!!.toInt()
println("두번째 값을 입력해주세요.")
val inputNum2 = readLine()!!.toInt()
println(
"연산자 옵션을 선택해주세요." +
"\n1 = 더하기, 2 = 빼기, 3 = 곱하기, 4 = 나누기"
)
val add = AddOperation().operation(inputNum1, inputNum2)
val sub = SubstractOperation().operation(inputNum1, inputNum2)
val mul = MultiplyOperation().operation(inputNum1, inputNum2)
val div = DivideOperation().operation(inputNum1, inputNum2)
while (true) {
val selectOperation = readLine()!!.toInt()
when (selectOperation) {
1 -> {
println(add)
break
}
2 -> {
println(sub)
break
}
3 -> {
println(mul)
break
}
4 -> {
println(div)
break
}
else -> {
println(
"1부터 4까지의 숫자만 입력해주세요." +
"\n1 = 더하기, 2 = 빼기, 3 = 곱하기, 4 = 나누기"
)
}
}
}
}
AbstractOperation.kt
abstract class AbstractOperation{
abstract fun operation(a:Int, b:Int):Int
}
AddOperation
class AddOperation: AbstractOperation() {
override fun operation(a: Int, b:Int):Int{
return a + b
}
}
SubstractOperation
class SubstractOperation: AbstractOperation(){
override fun operation(a: Int, b: Int): Int {
return a - b
}
}
MultyplyOperation
class MultiplyOperation: AbstractOperation(){
override fun operation(a: Int, b: Int): Int {
return a * b
}
}
DivideOperation
class DivideOperation: AbstractOperation(){
override fun operation(a: Int, b: Int): Int {
return a / b
}
}
'My Story' 카테고리의 다른 글
[인텔리픽] 한 달 인턴 최종 합격 후기 (0) | 2024.08.15 |
---|---|
[내일배움캠프 - 스파르타코딩] 안드로이드 과정 수료 후기 (0) | 2024.07.11 |
[내일배움캠프 - 스파르타코딩] 이번 주 우수 TIL에 선정되다..! (1) | 2024.03.18 |
[내일배움캠프 - 스파르타코딩] 자기소개 앱 KPT 회고록 (1) | 2024.03.07 |
[내일배움캠프 - 스파르타코딩] 부트캠프를 시작하다..! (4) | 2024.02.26 |
주코딩의 개발 노트!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!