클래스와 상속은 왜 쓰는걸까?

김태영·2024년 6월 14일
0

TIL

목록 보기
29/70
post-thumbnail

오늘 공부한 것

- 알고리즘 멀리 뛰기 풀이
- 코틀린 문법 종합반 복습
- 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도날드 햄버거는 햄버거의 자식으로 볼 수 있고, 햄버거는 또 음식의 자식으로 볼 수 있다.

필요성

✅ 코드의 재사용성이 높아진다.

✅ 유지보수가 용이해진다.

✅ 코드의 중복을 줄여준다.

✅ 계층적 구조를 만들 수 있다.

✅ 다형성을 가능하게 한다.

마치며

클래스와 상속은 개념은 알겠는데 실제로 적용하는 게 어려운 것 같다. 사실 개념을 제대로 모르는 게 아닐까? 내가 지금 어떤 부분을 모르고 있는 건지 인지하는 게 너무 어려운 것 같다.

profile
화이팅

0개의 댓글