학습
Scala 기본 모듈 시스템
Scala 기본 모듈 시스템 — 초급
기본 모듈 시스템
1. 도입 (왜 배워야 하는가)
Scala의 모듈 시스템은 코드의 재사용성과 조직화를 높이는 중요한 요소입니다. 실무에서는 대규모 애플리케이션을 개발할 때 다양한 모듈을 효과적으로 관리해야 하며, 이를 통해 코드의 유지보수성을 높이고 팀원 간의 협업을 원활히 할 수 있습니다. 모듈 시스템을 이해하지 못하면, 코드가 복잡해지고 중복이 발생하며, 의존성 관리가 어려워져 결국 프로젝트의 품질이 저하될 수 있습니다.
2. 핵심 개념 설명
Scala의 모듈 시스템은 크게 패키지와 오브젝트로 나눌 수 있습니다.
2.1 패키지
패키지는 관련된 클래스와 오브젝트를 그룹화하는 방법으로, 마치 서류를 폴더로 정리하는 것과 같습니다. 패키지를 사용하면 코드의 구조를 명확히 하고, 이름 충돌을 방지할 수 있습니다.
| 용어 | 설명 |
|---|---|
| 패키지 | 클래스와 오브젝트의 집합 |
| 네임스페이스 | 패키지를 통해 이름 충돌을 방지하는 공간 |
2.2 오브젝트
오브젝트는 싱글턴 인스턴스를 제공하는 Scala의 독특한 개념입니다. 마치 집에 하나만 있는 냉장고처럼, 오브젝트는 프로그램 내에서 하나만 존재하며, 전역 상태를 유지할 수 있습니다.
3. 기본 코드 예제
아래는 기본 패키지와 오브젝트를 사용하는 간단한 예제입니다.
package com.example
object HelloWorld {
def main(args: Array[String]): Unit = {
println("안녕하세요, Scala!")
}
}
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
안녕하세요, Scala!
코드 동작 설명
package com.example:com.example라는 패키지를 정의합니다.object HelloWorld:HelloWorld라는 오브젝트를 선언합니다. 이는 싱글턴 인스턴스입니다.def main(args: Array[String]): Unit: Scala 프로그램의 진입점인main메서드를 정의합니다.println("안녕하세요, Scala!"): 콘솔에 "안녕하세요, Scala!"를 출력합니다.- 잘못된 코드:
- 올바른 코드:
- 잘못된 코드:
- 올바른 코드:
- Scala의 모듈 시스템은 코드의 재사용성과 조직화에 필수적입니다.
- 패키지와 오브젝트는 코드 관리의 기본 단위입니다.
- 실무에서 패키지와 오브젝트를 활용하여 효율적인 코드를 작성할 수 있습니다.
- 다음에 학습하면 좋은 주제: Scala의 클래스와 상속, Trait 사용법.
4. 실전 활용 예제
예제 1: 쇼핑몰의 장바구니 구현
쇼핑몰에서 장바구니를 구현할 때, 제품 정보를 관리하는 패키지를 만들 수 있습니다.
package com.shop
object Cart {
var items: List[String] = List()
def addItem(item: String): Unit = {
items = items :+ item
println(s"$item 이(가) 장바구니에 추가되었습니다.")
}
def showItems(): Unit = {
println("장바구니의 상품: " + items.mkString(", "))
}
}
예제 2: 사용자 인증 시스템
사용자 인증을 관리하기 위해 별도의 패키지를 생성할 수 있습니다.
package com.auth
object Auth {
private var loggedInUsers: Set[String] = Set()
def login(user: String): Unit = {
loggedInUsers += user
println(s"$user 가 로그인했습니다.")
}
def logout(user: String): Unit = {
loggedInUsers -= user
println(s"$user 가 로그아웃했습니다.")
}
}
5. 흔한 실수와 주의사항
실수 1: 패키지 이름 중복
package com.shop
package com.shop // 패키지 중복
package com.shop
패키지를 중복으로 정의하면 컴파일 오류가 발생합니다.
실수 2: 오브젝트 멤버 접근 오류
object Example {
private val secret = "비밀"
}
println(Example.secret) // 오류 발생
object Example {
private val secret = "비밀"
def getSecret: String = secret
}
println(Example.getSecret) // 정상적으로 "비밀" 출력
private 멤버는 외부에서 접근할 수 없으므로, 접근할 방법을 제공해야 합니다.