✨ 오늘 공부한 것
- 알고리즘 멀리 뛰기 풀이 - 코틀린 문법 종합반 복습 - GPT 사용법 특강 - 클래스와 상속에 대해 조금 더 알아보기
맨날 헷갈려하지 말고 이 기회에 용어를 확실히 알고 넘어가자!
💡 매개변수 parameter
매개변수는 함수를 정의할 때 사용되는 변수들을 의미한다. 다음 코드에서 q와 w에 해당하는 녀석들을 매개변수 혹은 파라미터라고 부른다.
fun monster(q: Int, w: Double) { println("q: $q w: $w") }
💡 전달 인자 / 인자 / 인수 / argument
함수를 호출할 때 전달되는 실제 값을 의미한다. 다음 코드에서 5와 2.0을 전달 인자, 인자, 인수 혹은 아규먼트라고 부른다.
monster(5, 2.0)
클래스는 설계도에 비유할 수 있다. 우리가 설계도를 사용하는 이유는 물건을 만들 때마다 매번 수작업으로 빚어주기엔 너무 비효율적이기 때문이다. 클래스도 똑같이, 같은 종류의 객체들을 쉽고 빠르게 만들 수 있기 때문에 사용한다.
한 초등학교 학생들의 이름, 성별, 과목별 성적을 한 번에 다루고자 할 때 클래스를 사용하지 않는 경우 다음과 같이 작성할 수 있을 것이다.
val mimi = mapOf(
"이름" to "mimi", "성별" to "여자", "성적" to mapOf(
"국어" to 80,
"수학" to 80,
"사회" to 80,
"과학" to 80,
)
몇 백명이나 되는 학생들의 데이터를 매번 이런 형식으로 작성하는 것은 비효율적이다. 또, 평균 성적을 구할때도 mimi의, "성적"의, 모든 과목의, value 들을 더해 나눠주는 방식을 써야한다.
이럴 때 클래스를 사용하면 학생 한 명당 객체를 만들어 데이터를 간단하게 다룰 수 있다. 또한, 클래스 내부에 평균 성적을 계산해주는 메소드도 작성해 언제나 원할 때 쉽게 평균 성적을 구할 수 있다!
class Student(
val name: String,
val gender: String,
val score: Map<String, Int>) {
// 값 뿐만 아니라 동작까지 가능!
fun getAverageScore() {
score.values.average()
}
}
✅ 코드의 재사용성이 높아진다.
✅ 데이터와 해당 데이터를 조작하는 메소드를 묶어 캡슐화 할 수 있다. (데이터와 기능을 구조화할 수 있다.)
✅ 유지보수가 용이해진다. (데이터와 메소드가 묶여있어 쉽게 찾아 수정할 수 있다.)
먼저 상속은 한 클래스가 다른 클래스이 속성과 메서드를 물려받는 것을 말한다. 물려받은 자식 클래스는 추가적으로 자신만의 특성이나 메소드를 가질 수도 있다.
맥X날드 햄버거로 예를 들어보자.
맥X날드 햄버거는 많은 햄버거들 중에서 브랜드가 맥X도날드인 햄버거들이다.
또 햄버거는 많은 먹을 수 있는 것 중에서 빵 사이에 내용물이 들어간 음식이다.
이걸 클래스로 생각해보면, 맥X도날드 햄버거는 햄버거의 자식으로 볼 수 있고, 햄버거는 또 음식의 자식으로 볼 수 있다.
✅ 코드의 재사용성이 높아진다.
✅ 유지보수가 용이해진다.
✅ 코드의 중복을 줄여준다.
✅ 계층적 구조를 만들 수 있다.
✅ 다형성을 가능하게 한다.
클래스와 상속은 개념은 알겠는데 실제로 적용하는 게 어려운 것 같다. 사실 개념을 제대로 모르는 게 아닐까? 내가 지금 어떤 부분을 모르고 있는 건지 인지하는 게 너무 어려운 것 같다.