CLion
1. 개요
1. 개요
CLion은 제트브레인스가 개발한 상용 통합 개발 환경으로, C 및 C++ 프로그래밍에 특화되어 있다. 이 IDE는 리눅스, macOS, 윈도우를 모두 지원하는 크로스 플랫폼 도구로서, 데스크톱 애플리케이션부터 임베디드 시스템 개발까지 광범위한 프로젝트에 활용된다.
주요 강점은 CMake를 기본 빌드 시스템으로 깊이 통합한 점에 있다. 이를 통해 프로젝트 구성, 빌드, 실행, 디버깅 작업을 원활하게 관리할 수 있다. 또한 스마트 코드 완성, 정적 코드 분석, 다양한 리팩토링 기능을 제공하여 코드 작성의 효율성과 정확성을 높여준다.
CLion에는 강력한 디버거와 프로파일러가 내장되어 있어, 코드의 실행 흐름을 추적하고 성능 병목 현상을 분석하는 데 도움을 준다. 상용 소프트웨어이지만 무료 평가판을 제공하여 사용자가 기능을 충분히 테스트해 볼 수 있다.
2. 주요 기능
2. 주요 기능
2.1. 스마트 코드 완성 및 분석
2.1. 스마트 코드 완성 및 분석
CLion의 핵심 기능 중 하나는 제트브레인스의 인텔리제이 플랫폼을 기반으로 한 고급 코드 완성 및 정적 코드 분석이다. 이 기능은 단순한 키워드나 변수명 제안을 넘어서, 프로젝트의 전체 컨텍스트를 이해하고 코드의 의미를 분석하여 정확한 제안을 제공한다. 특히 C++의 복잡한 템플릿과 상속 구조를 파악하여 적절한 멤버 함수나 네임스페이스를 추천하며, 코드 작성 중 실시간으로 타입을 검사하고 잠재적인 오류를 강조 표시한다.
정적 코드 분석 엔진은 코드를 실행하지 않고도 버그, 메모리 누수, 스타일 위반, 비효율적인 패턴 등을 찾아낸다. 이는 코드 리뷰를 보완하고 코드 품질을 사전에 향상시키는 데 도움이 된다. 분석 결과는 에디터 내에서 인라인으로 표시되며, 문제에 대한 설명과 빠른 수정 제안을 함께 제공하여 개발자의 생산성을 높인다.
이러한 스마트 기능들은 CMake와 같은 빌드 시스템과 긴밀하게 통합되어 프로젝트의 의존성과 빌드 설정을 정확히 이해하는 데 기반을 둔다. 이를 통해 리팩토링 작업 시에도 안전하게 코드 구조를 변경할 수 있으며, 코드 탐색과 정의로 이동 같은 기능의 정확도를 극대화한다.
2.2. 통합 디버거 및 테스트 러너
2.2. 통합 디버거 및 테스트 러너
CLion은 강력한 통합 디버거를 제공하여 개발자가 C 및 C++ 코드를 효율적으로 디버깅할 수 있도록 지원한다. 이 디버거는 GDB 및 LLDB와 같은 다양한 백엔드 엔진과 원활하게 통합되어 있으며, 사용자는 코드 내에서 직접 중단점을 설정하고 변수 값을 실시간으로 검사하며, 복잡한 데이터 구조를 시각적으로 탐색할 수 있다. 또한 인라인 디버거 기능을 통해 소스 코드 옆에 변수 값이 표시되어 실행 흐름을 직관적으로 파악하는 데 도움이 된다.
테스트와 관련하여 CLion은 Google Test, Boost.Test, Catch2 등 주요 C++ 유닛 테스트 프레임워크에 대한 내장 지원을 포함하고 있다. 통합된 테스트 러너를 통해 사용자는 프로젝트 내의 테스트 케이스를 탐색, 실행 및 결과를 확인할 수 있으며, 성공 또는 실패한 테스트에 대한 상세한 리포트를 받아볼 수 있다. 이는 테스트 주도 개발 방식을 따르는 개발자에게 특히 유용한 기능이다.
디버거는 멀티스레드 애플리케이션의 디버깅도 지원하며, 각 스레드의 호출 스택과 상태를 별도로 조사할 수 있다. 원격 디버깅 기능을 활용하면 리눅스 서버나 임베디드 장치와 같은 원격 시스템에서 실행 중인 애플리케이션을 로컬 CLion 환경에서 디버깅할 수 있어, 크로스 플랫폼 개발 및 임베디드 시스템 개발 워크플로우를 크게 향상시킨다.
CLion의 디버깅 및 테스트 도구는 CMake나 Makefile과 같은 빌드 시스템과 긴밀하게 연동되어 구성된다. 사용자는 특정 실행 구성을 만들어 디버그 또는 테스트 실행 시의 인자, 환경 변수, 작업 디렉토리 등을 세부적으로 제어할 수 있으며, 이러한 구성들은 프로젝트와 함께 저장되어 팀원들과 공유되거나 버전 관리 시스템에 포함될 수 있다.
2.3. CMake, Makefile 등 빌드 시스템 통합
2.3. CMake, Makefile 등 빌드 시스템 통합
CLion은 CMake를 기본이자 권장 빌드 시스템으로 내장 지원한다. 이 통합을 통해 사용자는 CMakeLists.txt 파일을 직접 편집하거나 IDE의 GUI 도구를 이용해 프로젝트 구성을 손쉽게 관리할 수 있으며, CMake 설정 변경 시 실시간으로 빌드 옵션이 갱신된다. 또한 Makefile이나 Gradle, 컴파일 데이터베이스(Compilation Database)와 같은 다른 빌드 시스템도 프로젝트에 통합하여 사용할 수 있어 기존 프로젝트를 유연하게 지원한다.
이러한 빌드 시스템 통합의 핵심은 강력한 코드 분석 기능과의 긴밀한 연동에 있다. CLion은 선택된 빌드 시스템의 설정을 기반으로 프로젝트의 전체 코드 모델을 정확하게 이해하여, 스마트 코드 완성, 정적 코드 분석, 리팩토링 및 디버거 작동에 필요한 정확한 정보를 제공한다. 즉, 빌드 구성이 코드 편집기의 지능형 지원 기능의 정확도를 직접적으로 결정한다.
CLion은 로컬 환경뿐만 아니라 원격 개발 및 임베디드 시스템 개발 시나리오에서도 빌드 시스템을 원활하게 처리한다. 예를 들어, SSH를 통해 원격 머신에 접속하거나 도커(Docker) 컨테이너 내에서 개발할 때, 해당 환경에 설치된 CMake나 Make를 이용해 빌드를 실행하고 결과를 로컬 IDE로 가져올 수 있다. 이는 크로스 플랫폼 개발이나 타겟 장비와 다른 개발 호스트 환경에서 작업할 때 큰 장점이 된다.
2.4. 리팩토링 도구
2.4. 리팩토링 도구
CLion은 C 및 C++ 코드의 구조를 안전하게 변경하고 개선할 수 있는 다양한 리팩토링 도구를 제공한다. 이 도구들은 코드베이스의 유지보수성을 높이고 오류를 줄이는 데 중점을 두고 있다.
주요 리팩토링 기능으로는 변수, 함수, 클래스, 파일 등의 이름 변경, 함수 시그니처 변경, 함수 추출, 변수 추출, 매개변수를 필드로 변경, 상속 계층 정리 등이 포함된다. 특히 이름 변경 리팩토링은 해당 심볼의 모든 사용처를 정확하게 찾아 함께 변경하며, 헤더 파일과 소스 파일 간의 참조도 올바르게 처리한다. 함수 추출 기능은 선택한 코드 블록을 새로운 함수로 분리하고 적절한 매개변수와 반환 타입을 자동으로 제안한다.
또한 CLion은 불필요한 코드를 제거하거나 간소화하는 데 도움이 되는 분석 기반의 빠른 수정 기능을 제공한다. 여기에는 사용되지 않는 include 지시문 제거, 중복 코드 제거, C++11 이후의 현대적 언어 기능으로의 변환 제안 등이 있다. 이러한 리팩토링은 대부분 키보드 단축키나 컨텍스트 메뉴를 통해 즉시 실행할 수 있어 개발 흐름을 방해하지 않는다.
리팩토링 작업의 안전성을 위해 CLion은 변경 사항을 적용하기 전에 미리보기를 제공하여 개발자가 결과를 검토할 수 있게 한다. 또한 정적 코드 분석 엔진과 긴밀하게 통합되어 리팩토링 과정에서 발생할 수 있는 잠재적 문제를 사전에 탐지하고 경고한다. 이는 대규모 프로젝트에서 코드 구조를 변경할 때 특히 유용하다.
2.5. 버전 관리 시스템 통합
2.5. 버전 관리 시스템 통합
CLion은 Git, Subversion, Mercurial, Perforce 등 주요 버전 관리 시스템을 내장 지원한다. 이를 통해 개발자는 통합 개발 환경 내에서 직접 리포지토리를 복제하거나, 변경 사항을 커밋하고 푸시하며, 브랜치를 생성 및 전환하는 등의 작업을 수행할 수 있다. 변경 이력을 시각적으로 확인하고 병합 충돌을 해결하는 도구도 제공되어, 코드 개발과 버전 관리 작업을 원활하게 연결한다.
특히 Git과의 통합이 깊게 이루어져 있으며, GitHub, GitLab, Bitbucket과 같은 원격 리포지토리 호스팅 서비스와의 연동도 용이하다. 통합 개발 환경의 편집기에서 바로 최근 커밋 내역을 확인하거나, 차이 비교 도구를 이용해 코드의 변경 사항을 줄 단위로 검토할 수 있다. 이러한 통합은 소프트웨어 개발 과정에서 필수적인 협업과 코드 관리의 효율성을 크게 높인다.
2.6. 원격 개발 지원
2.6. 원격 개발 지원
CLion은 로컬 개발 환경을 벗어나 원격 서버나 컨테이너 환경에서도 개발 작업을 수행할 수 있는 원격 개발 기능을 제공한다. 이 기능을 통해 개발자는 자신의 컴퓨터에 복잡한 개발 환경을 구축하지 않고도, 강력한 서버 자원을 활용하거나 특정 리눅스 배포판과 같은 타겟 환경에서 직접 코드를 작성, 빌드, 실행, 디버깅할 수 있다.
주요 원격 개발 시나리오로는 SSH를 통한 원격 호스트 연결과 Docker 컨테이너 내에서의 개발이 있다. SSH 원격 개발 모드에서는 사용자가 원격 리눅스, macOS, 또는 윈도우 서버에 접속하여, CLion의 모든 인텔리전스 기능(코드 완성, 탐색, 리팩토링 등)을 그대로 사용하면서 프로젝트를 관리할 수 있다. 프로젝트 파일은 원격 호스트에 상주하며, 로컬에서는 캐시된 복사본을 통해 작업하게 된다.
Docker를 이용한 개발은 프로젝트에 필요한 특정 도구 체인이나 라이브러리 종속성을 컨테이너 이미지로 패키징하여, 모든 팀원이 동일하고 일관된 개발 환경을 손쉽게 구성할 수 있게 해준다. CLion은 Docker 컨테이너를 개발 환경으로 삼아 프로젝트를 열고, 내장된 터미널이나 디버거를 통해 컨테이너 내부에서 애플리케이션을 실행 및 테스트할 수 있다. 이는 특히 크로스 플랫폼 개발이나 복잡한 의존성을 가진 프로젝트에 유용하다.
이러한 원격 개발 지원은 임베디드 시스템 개발이나 고성능 컴퓨팅과 같이 특수한 하드웨어나 소프트웨어 환경이 필요한 경우, 또는 로컬 머신의 성능이 제한적인 상황에서 개발 생산성을 크게 향상시킨다. CLion의 통합 인터페이스 안에서 로컬 개발과 동일한 경험을 유지하며 원격 자원을 활용할 수 있다는 점이 큰 장점이다.
3. 지원 언어 및 기술
3. 지원 언어 및 기술
3.1. C 및 C++
3.1. C 및 C++
CLion은 C 및 C++ 언어에 대한 최고 수준의 네이티브 지원을 제공하는 것을 핵심 설계 목표로 삼고 있다. 이 통합 개발 환경은 두 언어의 최신 표준을 지속적으로 추적하며, 복잡한 템플릿, 람다 표현식, 그리고 기타 현대적인 언어 기능에 대한 깊이 있는 이해를 바탕으로 정확한 코드 분석과 완성을 제공한다.
이 도구는 C++ 표준 라이브러리와 다양한 C 라이브러리를 완벽하게 인식하며, 사용 중인 빌드 시스템(CMake, Makefile 등)의 설정을 실시간으로 분석하여 프로젝트의 정확한 모델을 구성한다. 이를 통해 헤더 파일과 소스 코드 간의 관계를 명확히 이해하고, 정의로의 점프, 인클루드 가드 관리, 심볼의 사용처 찾기 등 일상적인 개발 작업을 효율적으로 지원한다.
CLion의 강력한 정적 코드 분석 엔진은 컴파일 전 단계에서 잠재적인 버그, 스타일 문제, 메모리 누수 위험(예: new/delete 불일치) 등을 조기에 발견하여 코드 품질을 높이는 데 기여한다. 또한, GDB 및 LLDB 디버거와의 긴밀한 통합을 통해 복잡한 C++ 애플리케이션의 디버깅 과정을 시각적으로 단순화한다.
3.2. Kotlin, Python, Swift 등 (제한적)
3.2. Kotlin, Python, Swift 등 (제한적)
CLion은 기본적으로 C 및 C++ 언어에 최적화된 통합 개발 환경이지만, 제한적인 범위 내에서 다른 프로그래밍 언어에 대한 지원도 제공한다. 이는 제트브레인스의 다른 IDE 제품군과의 일관성을 유지하거나, 혼합 언어 프로젝트를 편리하게 관리할 수 있도록 하기 위한 목적이 크다.
Kotlin의 경우, 제트브레인스가 주도적으로 개발한 언어이므로 CLion에서도 기본적인 문법 강조, 코드 완성, 탐색 기능을 사용할 수 있다. 그러나 안드로이드 스튜디오나 IntelliJ IDEA와 같은 전용 IDE에 비해 기능이 제한적이며, 주로 네이티브 인터페이스를 통해 C/C++ 코드와 혼용되는 프로젝트에서 보조적으로 활용된다. Python과 Swift에 대해서도 유사하게, 플러그인을 통해 기본적인 편집 기능을 확장할 수 있지만, 해당 언어에 특화된 풍부한 도구나 프레임워크 지원은 기대하기 어렵다.
이러한 다중 언어 지원은 CLion이 C/C++를 중심으로 하는 크로스 플랫폼 개발 환경으로서의 역할을 강화한다. 예를 들어, 게임 엔진의 스크립팅 언어로 Python을 사용하거나, iOS 및 macOS 애플리케이션에서 C++ 라이브러리와 Swift 프론트엔드를 함께 개발하는 경우, 하나의 IDE 내에서 주요 코드베이스를 관리하는 데 도움이 된다. 그러나 언어별 전문적인 개발을 위해서는 해당 언어에 맞는 전용 도구를 병행하는 것이 일반적이다.
3.3. 임베디드 개발
3.3. 임베디드 개발
CLion은 임베디드 시스템 개발을 위한 강력한 기능을 제공한다. 이 통합 개발 환경은 크로스 플랫폼 개발을 지원하며, 마이크로컨트롤러와 같은 다양한 임베디드 하드웨어 대상에 대한 애플리케이션 개발을 용이하게 한다. 이를 위해 OpenOCD 및 SEGGER J-Link와 같은 디버그 프로브와의 통합을 지원하고, STM32, ESP32, Raspberry Pi 등 널리 사용되는 플랫폼에 대한 사전 구성된 프로젝트 템플릿을 포함하고 있다.
주요 임베디드 개발 기능으로는 통합된 디버거를 통한 원격 디버깅과 플래시 메모리 프로그래밍 지원이 있다. 또한 CMake 빌드 시스템과의 긴밀한 통합을 통해 복잡한 크로스 컴파일 툴체인 설정을 관리할 수 있으며, ARM Cortex-M 시리즈와 같은 아키텍처를 위한 코드 완성 및 정적 분석이 최적화되어 있다. 이로써 개발자는 호스트 머신에서 타겟 장치의 코드를 효율적으로 작성, 빌드, 디버그할 수 있다.
4. 장단점
4. 장단점
4.1. 장점
4.1. 장점
CLion은 C 및 C++ 개발에 특화된 통합 개발 환경으로서, 여러 가지 강력한 장점을 제공한다. 가장 큰 장점은 깊이 있는 코드 이해와 분석을 바탕으로 한 지능형 지원 기능이다. 스마트 코드 완성은 프로젝트의 전체 컨텍스트를 고려하여 정확한 제안을 제공하며, 강력한 정적 코드 분석 엔진은 코드를 실시간으로 검사하여 오류, 잠재적 버그, 스타일 문제를 즉시 강조 표시한다. 이는 코드 품질을 높이고 디버깅 시간을 단축시키는 데 크게 기여한다.
또한, CLion은 현대적인 C 및 C++ 개발 워크플로우에 필수적인 도구들을 원활하게 통합한다. CMake를 기본 빌드 시스템으로 완벽하게 지원하며, Makefile이나 Gradle과 같은 다른 빌드 시스템과도 호환된다. 통합된 디버거와 테스트 러너는 애플리케이션의 실행, 디버깅, 단위 테스트를 하나의 환경 내에서 손쉽게 수행할 수 있게 해준다. 리팩토링 도구는 변수, 함수, 클래스의 이름 변경이나 서명 변경과 같은 작업을 안전하게 수행하도록 돕는다.
CLion은 크로스 플랫폼 개발과 임베디드 시스템 개발을 효율적으로 지원한다는 점도 주요 장점이다. 윈도우, 맥OS, 리눅스에서 동일한 인터페이스와 기능을 제공하며, 원격 개발 기능을 통해 원격 머신이나 컨테이너 상의 코드를 로컬에서 편집하는 것과 같은 경험으로 개발할 수 있다. 특히 임베디드 개발을 위해 다양한 마이크로컨트롤러와의 연결, OpenOCD 디버깅, 시리얼 포트 모니터링 등의 기능을 내장하고 있어 전문적인 임베디드 프로젝트에 적합하다.
마지막으로, 제트브레인스의 다른 개발 도구들과의 일관된 사용자 경험과 생태계 통합도 장점으로 꼽힌니다. 사용자는 IntelliJ IDEA와 유사한 단축키와 인터페이스에 익숙해질 수 있으며, 버전 관리 시스템 통합, 데이터베이스 도구, 다양한 플러그인을 통해 개발 환경을 확장할 수 있다. 이는 개발자가 여러 언어와 프레임워크를 넘나드는 프로젝트에서도 생산성을 유지하는 데 도움을 준다.
4.2. 단점
4.2. 단점
CLion은 상용 소프트웨어로, 무료 평가판 이후에는 유료 구독을 통해 사용해야 한다. 이는 비주얼 스튜디오 코드나 이클립스 CDT와 같은 무료 대안에 비해 진입 장벽이 될 수 있다. 특히 학생이나 취미 개발자에게는 부담이 될 수 있는 요소이다.
CMake를 기본 빌드 시스템으로 채택하고 있어, 다른 빌드 시스템(예: Autotools, Bazel, Meson)을 사용하는 프로젝트에서는 추가 설정이 필요하거나 지원이 제한될 수 있다. 또한, 대규모 프로젝트를 로드하거나 인덱싱할 때 초기 로딩 시간이 길고, 시스템 리소스(특히 메모리)를 상당히 소모할 수 있다는 점도 단점으로 지적된다.
제트브레인스의 다른 IDE와 마찬가지로, CLion도 IntelliJ 플랫폼을 기반으로 하여 비교적 무거운 애플리케이션에 속한다. 이로 인해 가벼운 텍스트 에디터에 비해 실행 속도가 느리고, 저사양 컴퓨터에서는 원활한 사용이 어려울 수 있다. 또한, C와 C++에 최적화되어 있어, 파이썬이나 코틀린 등 다른 언어에 대한 지원은 제한적이거나 플러그인에 의존해야 한다.
5. 라이선스 및 요금제
5. 라이선스 및 요금제
CLion은 상용 소프트웨어로, 정식 사용을 위해서는 유료 라이선스를 구매해야 한다. 제트브레인스는 30일간의 무료 평가판을 제공하여 사용자가 모든 기능을 충분히 테스트해 볼 수 있도록 한다.
라이선스 구매 옵션으로는 개인용, 상업용, 조직용 등이 있으며, 일반적으로 연간 구독제 형태로 제공된다. 학생과 교사, 오픈소스 프로젝트 개발자에게는 무료 라이선스를 신청할 수 있는 특별 프로그램이 마련되어 있다. 이러한 프로그램의 자격 요건을 충족하면 제트브레인스의 모든 제품군을 무료로 사용할 수 있다.
라이선스는 제트브레인스 계정에 연결되어 관리되며, 한 라이선스로 Windows, macOS, 리눅스 등 여러 운영체제에서 사용이 가능하다. 또한, CLion은 제트브레인스의 다른 통합 개발 환경인 IntelliJ IDEA, PyCharm, WebStorm 등과 통합된 올-프로덕트 팩 구독도 제공한다.
6. 관련 도구 및 플러그인
6. 관련 도구 및 플러그인
CLion은 제트브레인스의 인텔리제이 플랫폼을 기반으로 구축되어, 해당 플랫폼 생태계의 다양한 도구 및 플러그인과의 원활한 통합을 자랑한다. 이를 통해 개발자는 기본 기능을 넘어서는 맞춤형 개발 환경을 구성할 수 있다. 특히 CMake를 중심으로 한 빌드 시스템 통합이 강점이며, Docker 및 원격 개발 환경과의 연동을 지원하는 플러그인을 통해 로컬 머신의 제약 없이 개발이 가능하다.
주요 통합 도구로는 버전 관리 시스템인 Git, Subversion, Mercurial에 대한 내장 지원이 포함되어 있다. 또한 Google Test, Catch2, Boost.Test 등의 유닛 테스트 프레임워크와의 통합을 위한 테스트 러너가 제공된다. 디버깅과 성능 분석을 위해 GDB, LLDB 디버거와 통합 프로파일러 도구를 활용할 수 있다.
CLion의 기능은 제트브레인스 마켓플레이스에서 제공되는 수많은 서드파티 플러그인을 통해 더욱 확장된다. 인기 있는 플러그인으로는 Doxygen 주석 생성을 지원하는 도구, 시각적 데이터베이스 관리 도구, 다양한 정적 분석 도구 연동 플러그인 등이 있다. 또한 Kotlin, Python, Swift 등 다른 언어에 대한 제한적이지만 유용한 편집 지원을 추가하는 플러그인도 존재한다.
이러한 광범위한 도구 및 플러그인 생태계는 CLion이 단순한 코드 편집기를 넘어, C++ 및 C 프로젝트의 복잡한 요구사항을 처리하는 포괄적인 개발 솔루션으로 자리매김하는 데 기여한다. 개발자는 프로젝트의 특성에 맞게 필요한 도구들을 선택적으로 통합하여 작업 흐름을 최적화할 수 있다.
7. 여담
7. 여담
CLion은 제트브레인스의 IntelliJ IDEA 플랫폼을 기반으로 구축되어, 자바로 개발된 통합 개발 환경임에도 C 및 C++ 개발에 특화된 높은 성능을 보여준다. 이는 동일한 플랫폼을 사용하는 코틀린용 안드로이드 스튜디오나 파이썬용 PyCharm과 같은 다른 제품군과 기술적 일관성을 공유한다.
CLion의 개발 철학은 개발자의 생산성 향상에 중점을 두고 있으며, 이는 강력한 코드 분석 엔진과 컨텍스트 인식 기능을 통해 구현된다. CMake를 기본 빌드 시스템으로 채택한 것은 현대적인 C++ 프로젝트의 표준을 반영한 결정으로, 프로젝트 설정의 복잡성을 줄이는 데 기여했다. 또한 리모트 개발 기능을 통해 리눅스 서버나 임베디드 장비에서의 원격 개발을 로컬 환경처럼 편리하게 수행할 수 있도록 지원한다.
오픈 소스 진영에서는 Eclipse CDT나 비주얼 스튜디오 코드와 같은 무료 대안이 존재하지만, CLion은 통합된 디버깅 경험과 깊이 있는 리팩토링 도구, 그리고 제트브레인스 특유의 정교한 코드 완성 기능으로 차별화된다. 이러한 기능들은 대규모 코드베이스를 다루는 전문 개발자들에게 특히 유용한 것으로 평가받는다.
CLion은 상용 소프트웨어이지만, 오픈 소스 프로젝트 개발자나 교육 기관을 위한 무료 라이선스 프로그램을 운영하고 있으며, 30일 무료 평가판을 통해 모든 기능을 충분히 테스트해 볼 수 있다. 이는 사용자가 본인의 워크플로우에 CLion이 얼마나 잘 통합되는지 판단할 수 있는 기회를 제공한다.
