본문 바로가기

프로그래밍 언어/코틀린_쌩초보를 위한 기초

쌩초보를 위한 기초_29_Class 종류 일반적인 클래스 외에 특정 기능을 가진 클래스들이 있다. 1. data class 데이터 클래스 일반적으로 클래스 안에는 속성과 동작이 있다. 그래서 속성은 property멤버로 선언하고 동작은 method멤버로 만든다. 그런데 특정 동작 없이 오직 데이터 저장을 위해 사용할 클래스라면 Data Class를 사용할 수 있다. 데이터 클래스는 오직 데이터 전달을 위한 클래스이다. 이렇게 특정 목적별로 이용할 수 있는 클래스로는 Sealed Class, Inner Class, Enum Class 등이 있다. 먼저 데이터 클래스에 대해 간단하게 알아본다. 데이터 클래스에서 data를 전달하는 객체가 필요하다. 이것을 DTO (Data Transfer Object)라고 한다. DTO는 데이터를 주고 받을 때 사.. 더보기
쌩초보를 위한 기초_28_Abstract Class & Interface Abstract Class (추상 클래스) 와 Interface (인터페이스) 개요 ab,abs는 '밖으로'라는 뜻이고 tract는 '끌다'라는 뜻이다. 그래서 abstract는 '(생각을) 밖으로 끄집어 내어 (개략적으로 표현하다)'라는 뜻이다. 즉, '추상적인, 관념적인'이라는 뜻이다. 그래서 코딩에서 abstract(추상)이라는 말은 완성품이 아니라 모형틀과 같다. 그래서 추상 클래스나 추상 함수는 선언 부분만 있고 실행 부분은 없다. 추상클래스는 클래스를 처음부터 완성하지 않고 일단 공통적인 기능과 개략적인 틀만 만든 후 구체적인 내용은 상속받는 하위 클래스에서 구현한다. 추상 클래스를 만들려면 class 앞에 키워드 abstract를 붙인다. 추상 클래스에 포함된 property(속성)나 met.. 더보기
쌩초보를 위한 기초_27_lateinit & lazy lateinit & lazy lateinit은 late(늦게, 지연) + init(initialize: 초기 값을 설정하다)를 합친 말이다. 즉, '초기값 설정을 나중에 한다'라는 뜻을 가진다. 클래스에서 선언한 변수를 property(프라퍼티)라고 했다. 변수를 선언하면 기본적으로 초기화 해야 한다. 그런데 만약 객체의 정보가 나중에 나오면 선언할 때 초기화가 어려울 수 있다. 또는 변수를 사용하는 시점에 초기화를 해야 하는 경우도 있다. 이런 경우에 lateinit을 사용할 수 있다. lateinit을 사용할 때 주의할 사항은 다음과 같다. lateinit은 var 변수에서만 사용할 수 있다. property에 대한 getter, setter는 사용할 수 없다. 늦은 초기화의 예를 만들어 본다. ma.. 더보기
쌩초보를 위한 기초_26_Visibility Modifier_가시성 제한자 캡슐화 Encapsulation 캡슐화는 객체지향 프로그래밍의 기본적인 개념 중 하나이다. 이것은 객체의 속성, 기능 등의 표현이나 상태를 숨기는데 사용하는 개념이다. '정보 숨기기'라고도 한다. 가시성 제한자 Visibility Modifier visibility modifier는 한글 이름이 사람마다 제각각으로 부른다. 가시성 지시자, 가시성 제한자, 접근 제한자 등 등. 영어 그대로 하면 '보기 제한자'도 좋을 듯 하다. visibility modifier는 다시말해 접근 권한을 제한하는 키워드라고 생각할 수 있다. 만약 선언하지 않으면 접근 제한이 없는 public이 기본값이다. 다른 패키지에서 최상위 선언을 보려면 import를 사용해야 한다. 접근을 제한하는 visibility modifier.. 더보기
쌩초보를 위한 기초_25_참조 키워드 super & this 참조 Reference 참조란 데이터 자료를 보고 참고하는 것을 말한다. 클래스에서 특정 메써드나 속성, 생성자를 참조해야 할 때 사용하는 키워드가 있다. 상위 클래스에는 super 현재 클래스에는 this super keyword super는 언제 사용하는가? overriding할 때 상위 클래스를 그대로 사용하고 필요한 내용만 추가하고 싶을 때 사용한다. super를 사용해서 상위클래스의 메써드, 속성, 생성자 등을 사용할 수 있다. 어떻게 작동하고 있는 지 지금까지 살펴본 내용을 적용하면서 확인해보자. get() 함수는 클래스의 멤버 변수를 만들 때 값을 가져오는(get) 작업을 임의로 지정하는데 사용하는 함수다. Cookie클래스와 bake() 메써드는 상속을 할 수 있다. bake()메써드의 실.. 더보기
쌩초보를 위한 기초_24_Inheritance_상속 Inheritance 상속 Inheritance(상속)는 그녀(her)의 안에(in) 넣어서 전달하는 것이다. 그것은 유전자이다. 자신의 유전자를 부모에게서 받아 자식에게 전달하는 것이 상속이다. 마찬가지로 프로그래밍에서의 상속도 같은 역할을 한다. 자식 클래스를 만들 때 부모 클래스의 property(속성)과 기능을 물려받는다. 정확히 말하면 그 속성과 기능을 이용할 수 있다는 뜻이다. 상속은 객체지향 프로그래밍(Object Oriented Programming)의 가장 큰 장점 중의 하나이다. 모든 클래스의 시조(최초) 클래스를 superclass(슈퍼클래스)라 하고 그 이름은 Any 이다. any의 뜻이 '어떤' 이므로 정확한 이름도 없는것 같다. 하여튼 '어떤 클래스(Any Class)'가 클래스.. 더보기
쌩초보를 위한 기초_23_Constructor 생성자 객체 도우미: 생성자 constructor 앞에서 객체는 class(클래스)를 통해 만들 수 있다고 했다. 이때 기본적으로 호출되는 함수가 생성자(constructor ; 컨스트럭터)이다. 모든 클래스는 생성자가 반드시 있어야 한다. 사용자가 만들지 않으면 보이지는 않지만 기본값이 자동으로 생성된다. 생성자는 왜 필요한가? 앞 글의 예 처럼 클래스라는 틀을 만들 때 중괄호 안에 필요한 속성이나 함수를 만들 수 있다. 이럴 경우 객체를 만들면 클래스에 이미 선언되어 있는 속성을 가진 한정된 객체만 만들 수 있다. 하지만 객체를 더 다양하고 유연하게 (다양한 종류의 쿠키를) 만들고 싶다면 어떻게 할 것인가? 이것을 구현하기 위해 생성자(Constructor)라는 함수를 만들었다. construct는 '건설하.. 더보기
쌩초보를 위한 기초_22_Class와 Object 클래스(clsss)와 오브젝트(object) 객체 지향 프로그래밍(Object Oriented Programming)은 함수형 프로그래밍과 함께 가장 강력한 프로그래밍 기법으로 자리 잡았다. 초창기에 사용하던 기법인 절차적 프로그래밍(Procedural Programming)은 코딩한 순서대로 실행하도록 만들어 졌는데 프로그램의 규모가 점점 커지고 복잡해지면서 새로운 프로그래밍 기법이 요구되었고 그 결과물로 탄생한 것이 객체지향 프로그래밍이다. 객체 지향이라는 말 그대로 객체라는걸 만들어 활용하면 큰 프로젝트를 구조적으로 나누거나 또는 분업해서 동시에 여러 명이 프로그래밍할 수 있으므로 효율적인 작업이 가능하다. 객체(object)를 만들기 위해서는 그것을 만들 수 있는 틀이 필요하다. 그 틀이 클래스(.. 더보기