클래스란 무엇일까?

기존에 가지고 있던 오해

⚫역할을 크게 나누어주는 이름이다?
->우테코 미션을 하며 패키지를 처음 나눈 뒤 클래스를 만들며 들었던 생각.
그러나, 이 설명으로는 view와 viewModel 등을 나누는 패키지와 클래스의 차이를 설명할 수 없다.
⚫함수를 묶어주는 그룹명의 역할을 한다?
4주차 미션을 예로 들자면 input을 점검하기 위한 클래스가 있고
그 안에는 각각의 조건들을 걸러내기 위한 함수가 들어가게 된다.

클래스의 정의

기존에 익숙하던 정의

클래스에 대해 한번이라도 공부해봤다면, 붕어빵과 붕어빵 틀 그리고 설계도
라는 설명을 접해봤을 것이다.
나는 디지털 아트 프로그래밍(이하 디아프) 수업에서 이 예시와 함께
이 비유는 이해를 돕기 위한 것이라는 이야기를 들은 기억이 난다.
당시 디아프 수업에서 배운 이 내용을 굳이 언급한 것은
바로, 이 비유가 이해를 돕기 위한 것이라는 내용
즉 이것만으로는 클래스를 설명하기에 완전치 않다는 그 뉘앙스 때문이다

내 언어로 정의하는 클래스

객체지향의 사실과 오해(이하 객사오)를 읽으며-
랑그와 클래스가 어딘지 모르게 닮았다는 생각을 하게 되었다
클래스란 랑그와 빠롤의 관계와 유사하여
클래스는 보편적인 규칙을 행사하고 객체는 구체적인 어떤 표현들이라고 느꼈다
물론 랑그와 달리 클래스는 객체가 탄생하는 순간 깨지는 개념이 아니나
지속적으로 변화하고 규칙을 제공한다는 점에서 비슷하게 다가왔다

클래스의 사전적 정의와 용도

클래스는 객체를 정의해 놓은 것으로, 객체를 생성하는 데에 사용된다

패키지

사전적 정의

⚫서로 관련된 클래스를 묶어놓은 논리적 단위
⚫패키지는 개념의 구분을 제공하여준다
⚫물리적으로는 하나의 디렉토리 폴더이다

왜 필요할까?

⚫클래스에게 유일성을 부여해준다
->클래스의 이름이 같더라도 경로가 다르면 문제가 발생하지 않는다
⚫접근 제한자를 활용하여 클래스나 변수에 대한 접근권한을 설정할 수 있다

인터페이스

사전적 정의

⚫서로 다른 두 시스템, 장치 등을 서로 이어주는 부분
⚫인터페이스 클래스:
서로 다른 두 클래스에서 공통적인 기능을 정의하는 경계면
서로 다른 두 클래스가 상호 운용성을 보장하기 위한 도구

왜 필요할까?

다중 상속 구현 가능(Kotlin 기준)

⚫다중 상속을 통해 복합적 기능을 가진 클래스를 간결하게 표현 가능

객체들에 대해서 동일한 동작을 약속

⚫즉 추상 클래스에 비하여 행동에 초점이 맞추어져있다고 이해 가능

제너릭

사전적 정의

⚫데이터 타입을 일반화하다
⚫클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법
⚫즉 필요에 의해 지정이 되게 해주는 일반 타입이다

제너릭의 이점

⚫잘못된 타입의 입력을 막을 수 있다
⚫관리가 용이하다
->따로 타입을 체크하고 변환해줄 필요가 없기 때문
⚫형 변환의 번거로움을 줄일 수도 있다
⚫코드의 재사용성 및 가독성을 높일 수 있다

코틀린 제너릭과 자바 제너릭 차이

자바: 와일드 카드

⚫특정 타입을 제외한 모든 타입 허용 가능
코틀린에서는 와일드 카드의 범위 지정 역시 가능

코틀린: 선언처 가변성⭕

⚫타입 파라미터를 지정시
런타임에서도 변경이 가능하다

공부 중 참조 링크

인터페이스 관련 게시물

인터페이스와 추상클래스
인터페이스와 추상 클래스의 차이

다중상속의 장단점

자바는 왜 다중상속을 지원하지 않을까

제너릭

제너릭 기본 문법
코틀린 제너릭

댓글남기기