코틀린의 기본적인 프로젝트 구조에 대해서 알아보자.
지금까지는 play.kotlinlang.org에서 실습을 진행했기 때문에 하나의 파일안에서 모든 내용을 담는 형태로만 배웠다.
1. 프로젝트

프로젝트?!
하지만 실제 코딩을 할 때는 프로젝트(project)구조로 진행을 한다. 프로젝트는 코틀린으로 어플리케이션을 개발할 때 관련한 모든 내용을 담는 '큰 틀'이다.
2. 모듈(module)

하나의 프로젝트는 여러개의 모듈로 구성된다.

모듈은 여러 파일, 폴더로 구성된다.
- 직접 구현하거나 라이브러리 모듈을 사용한다.
- 모듈에는 코틀린 파일(.kt) 뿐만 아니라 모듈과 관련된 설정, 리소스 파일등도 포함된다.
3. 물리 구조 vs 논리 구조
3- 1. 물리구조 : 프로젝트, 모듈, 폴더 및 파일
- 실제 파일 시스템에 기반한 물리적인 구조를 담당한다.
3-2. 논리 구조 : 패키지
- 개발 시의 소스코드의 소속을 지정하기 위한 논리적 단위
- 코드를 작성할 때 코드내에서 사용하는 이름이 용도에 따라 서로 충돌하면 안된다.
- 따라서 유니크한 패키지 이름을 지어준다.
3-3. 패키지 작명방식
- 일반적으로 패키지 이름을 지을 때는 회사가 개발한 도메인이름을 거꾸로 배열한 후,
- 그 뒤에 프로젝트 명을 붙인 후,
- 그 아래에 기능별로 세분화하는 방식으로 적는다.
예시.
도메인 : youtube.com
프로젝트 이름 : dowon
- 도메인 이름을 거꾸로 배열 : com.youtube
- 프로젝트 이름 붙임 : com.youtube.dowon
- 기능별로 세분화
- com.youtube.dowon.base
- com.youtube.dowon.kotlin
- com.youtube.dowon.android
- com.youtube.dowon.talk
- ...
3-4. 패키지 분류
어떻게 패키지로 묶을 수 있는가?
코드파일을 패키지에 넣는 방법은 코드파일 맨 윗줄에 package 키워드를 적고 패키지 이름을 적으면 된다.
package com.youtube.dowon
fun main() {
println("프로젝트의 기본 구조")
}
- 패키지를 명시하지 않으면 자동으로 'default' 패키지로 묶이게 된다.
- 코틀린은 자바와 달리 폴더명과 패키지 구조를 일치시키지 않아도 된다.
- 파일 상단에 패키지만 명시해주면 컴파일러가 알아서 처리한다.
3-5. 공유

- 같은 패키지 내에서는 변수, 함수, 클래스를 이름만으로 공유해서 쓸 수 있다.
- 그러나 다른 패키지에서는 바로 쓸수는 없다.
- 다른 패키지를 공유하기 위해서는 import 키워드를 통해서 해당 외부 패키지를 임포트해야한다.
package com.youtube.dowon
import com.youtube.dowon.base
fun main() {
println("프로젝트의 기본 구조")
}
- 이름이 중복되는 경우에는 패키지명을 포함한 풀네임을 명시해야한다.
- ex) com.youtube.dowon.A
코틀린은 자바와 달리 하나의 파일안에 여러개의 클래스를 넣어도 컴파일이 가능하다. 이는 파일이나 폴더인 물리적인 구조를 기준으로 하지않고 파일내에 있는 package 키워드를 기준으로 구분하기 때문이다.
이 구조는 코틀린으로 실제 어플리케이션을 만들 때 뿐만 아니라 접근제한자 개념에서 사용하는 개념이므로 꼭 기억하길 바란다.