IntelliJ IDEA에서 Java 애플리케이션 만들기
IntelliJ IDEA에서 Java 애플리케이션 만들기
IntelliJ IDEA는 Java 개발에 가장 널리 쓰이는 통합 개발 환경(IDE) 중 하나예요. 친숙한 인터페이스와 풍부한 기능, 방대한 생태계 덕분에 초보 개발자들이 프로그래밍을 배우고 성장하기에 이상적인 환경이에요. 이 글에서는 IntelliJ IDEA를 설치하고 Java 프로젝트를 만들어 코드를 작성·실행·테스트·디버깅·리팩터링하는 전 과정을 하나씩 따라가 볼게요.
본문
개요
IDE(Integrated Development Environment, 통합 개발 환경)는 소스 코드 에디터와 코드 컴파일·실행 기능을 결합하고, 빌드·테스트·디버그 도구 및 버전 관리 시스템 등과의 통합까지 제공해서 애플리케이션을 빠르게 만들 수 있게 해줘요. 마지막으로 IDE는 파일 시스템만으로는 할 수 없는 방식으로 코드베이스를 검색하고 탐색할 수 있게 해줘요.
Java용 가장 널리 사용되는 통합 개발 환경(IDE) 중 하나가 IntelliJ IDEA예요. 사용자 친화적인 인터페이스, 풍부한 기능, 방대한 생태계 덕분에 초보 개발자들이 개발자로 배우고 성장하기에 이상적인 환경이에요. 이 튜토리얼에서는 그 기능 중 일부를 사용해 개발 과정을 단순화하고 Java 프로그래밍 학습 곡선을 가속화하는 방법을 배울 거예요.
IntelliJ IDEA 설치하기
IntelliJ IDEA를 설치하려면 IntelliJ IDEA 웹사이트에서 다운로드하고 안내를 따르면 돼요.
IntelliJ IDEA를 처음 설치하면 Ultimate 구독의 30일 무료 체험이 포함돼 있어요. 이 구독은 전문 개발을 위한 고급 기능을 제공하지만, 이 튜토리얼에는 필요하지 않아요. 구독 체험 기간이 끝나도 IntelliJ IDEA는 Java 개발에 필요한 모든 기본 기능을 갖춘 채 완전히 기능하며 유지돼요.
운영체제에서 IntelliJ IDEA를 설치하는 방법에 대한 자세한 내용은 문서를 참고하세요.
IntelliJ IDEA를 처음 실행하면 Welcome 화면이 보일 거예요. 여기서 새 프로젝트를 만들거나, 기존 프로젝트를 열거나, 버전 관리 시스템(예: GitHub)에서 프로젝트를 가져올 수 있어요.
Java로 작업을 시작하려면 JDK를 설치해야 해요. Getting Started with Java에서 설명한 대로 직접 설치할 수도 있고, IDE나 다른 도구(브라우저, 파일 시스템 등)를 벗어나지 않고 JDK를 다운로드·구성하도록 새 프로젝트를 만들 때 IntelliJ IDEA에서 할 수도 있어요.
새 프로젝트 만들기
Welcome 화면에서 새 프로젝트를 만들거나, 주 메뉴에서 File | New | Project로 이동하면 돼요.
New Project 마법사에서 왼쪽의 Java가 선택되어 있는지 확인하고, 프로젝트 이름을 지정하세요(예: java-demo).
다음으로 Build system(빌드 시스템)을 선택할게요. IntelliJ IDEA는 Java에서 가장 많이 쓰이는 빌드 시스템인 Maven과 Gradle을 모두 지원해요. Maven이나 Gradle 같은 빌드 도구는 프로젝트를 빌드하고 Java 코드에서 사용하려는 의존성(추가 라이브러리 등)을 관리하는 데 도움을 줘요. 빌드 도구를 사용하면 애플리케이션을 공유하고 다른 머신에서 빌드하기도 쉬워져요. 둘 다 사용하고 싶지 않다면 IntelliJ 빌드 시스템을 사용할 수 있어요. 이 튜토리얼에서는 Maven 프로젝트를 만들어볼게요.
Java 애플리케이션을 개발하려면 JDK가 필요해요. 필요한 JDK가 이미 IntelliJ IDEA에 정의되어 있다면 JDK 목록에서 선택하세요. 이 튜토리얼에서는 Java 25를 사용할 거예요.
JDK가 컴퓨터에 설치되어 있지만 IDE에는 정의되어 있지 않다면, 목록에서 Add JDK 옵션을 선택하고 JDK 홈 디렉터리 경로를 지정하세요(예: /Library/Java/JavaVirtualMachines/openjdk-25.0.2.jdk).
컴퓨터에 필요한 JDK가 없다면 Download JDK를 선택하세요. Download JDK 팝업에서 JDK 공급업체(예: Oracle OpenJDK)와 버전을 지정하고, 필요하면 설치 경로를 변경한 다음 Download를 클릭하세요.
Add sample code를 선택하면 "Hello World"를 출력하는 Main 클래스가 프로젝트에 추가돼요. 나중에 직접 코드를 추가할 수 있도록 이것은 체크하지 않은 채로 두세요.
New Project 팝업에서 입력이 마음에 들면 Create를 클릭하세요.
IntelliJ IDEA가 프로젝트를 만들어줘요. 빌드 시스템으로 Maven을 선택했다면, 프로젝트에는 기본 pom.xml과 소스 폴더가 정의된 Maven 프로젝트의 기본 디렉터리 구조가 포함돼요. pom.xml은 프로젝트에 대한 정보와 Maven이 프로젝트를 빌드할 때 사용하는 구성 세부 정보를 담고 있는 파일이에요. 자세한 내용은 Maven 문서를 참고하세요.
왼쪽의 Project 도구 창에서 프로젝트 구조를 볼 수 있어요. .idea 폴더에는 프로젝트 구성이 들어 있어요. src 폴더에는 코드가 들어 있죠. 이 폴더를 펼치면 IntelliJ IDEA가 Java 코드용 main 폴더와 테스트용 test 폴더를 만들었다는 걸 알 수 있어요.
코드 작성과 편집
코드를 추가해볼게요. Java 25부터는 Java 코드 작성 시작이 훨씬 쉬워졌어요. **축약형 소스 파일(compact source file)**을 만들 수 있기 때문이에요.
- 왼쪽의 Project 도구 창에서
src/main/java디렉터리를 선택하세요. - 새 축약형 소스 파일을 추가하려면 Project 도구 창을 마우스 오른쪽 클릭해 컨텍스트 메뉴를 열고 New | Java Compact File을 선택하세요.
- 이 파일의 이름을
HelloWorld로 지으세요.
참고: Java 25보다 오래된 버전을 사용한다면 축약형 소스 파일을 만들 수 있는 옵션이 없을 거예요. Java 클래스를 만들어야 해요. 대신 New | Java Class를 선택하세요.
IDE 팁
Project 도구 창의 원하는 디렉터리에서 단축키 ⌘N(macOS) 또는 Alt+Insert(Windows/Linux)를 사용해 새 Java 파일을 추가할 수 있어요.
Java 프로그램을 실행하는 진입점은 main 메서드예요.
축약형 소스 파일을 만들었다면 IntelliJ IDEA가 이 main 메서드를 자동으로 추가해줬을 거예요. 다음과 같을 거예요.
void main() {
}
간단하게 유지하기 위해, 프로그램이 콘솔에 Hello World!를 출력하고 커서를 새 줄로 옮기도록 메서드 본문에 IO.println("Hello World!");을 추가해볼게요.
void main() {
IO.println("Hello World!");
}
복사-붙여넣기보다는 코드를 직접 타이핑하는 것을 추천해요. 문법에 더 친숙해지는 데 도움이 되거든요.
타이핑을 시작하면 IntelliJ IDEA가 코드 완성(code completion)을 제공한다는 걸 알게 될 거예요. 클래스, 메서드, 필드, 키워드 이름과 다른 유형의 완성을 도와줘요. 화살표 키로 목록에서 원하는 옵션을 선택하고, Return(macOS) 또는 Enter(Windows/Linux) 키를 눌러 선택을 적용하세요.
Java에 대해 더 배워가며 코드를 확장할 수 있어요. 예를 들어 축약형 소스 파일을 클래스로 변환할 수 있어요. IntelliJ IDEA에는 이를 도와주는 검사(inspections)와 빠른 수정(quick-fixes)이 있어요.
축약형 소스 파일을 클래스로 변환하려면 main 메서드에 커서를 놓고 Alt+Enter를 누르세요. 옵션 목록에서 Convert into a regular class를 선택하세요. IntelliJ IDEA가 축약형 소스 파일을 클래스로 변환해줘요.
대안으로, 명령 완성(command completion)을 사용해 에디터에서 관련 명령을 수행할 수 있어요. main 메서드 뒤에 점 두 개 ..를 입력하고 Convert into a regular class 옵션을 선택하세요.
참고: Java 클래스를 만들었다면 IntelliJ IDEA가 클래스 선언이 있는 파일을 만들었을 거예요. main 메서드는 직접 추가해야 해요. 콘솔에 출력하려면 메서드 본문에 System.out.println("Hello World!");을 추가하세요.
전통적인 Java HelloWorld 프로그램은 다음과 같아요.
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
IntelliJ IDEA는 컴파일되지 않는 것을 입력하거나 선택했거나 다른 문제를 발견하면 표시해줘요. Alt+Enter를 누르면 문제를 고칠 옵션을 제안해요. F2로 다음 문제로, Shift+F2로 이전 문제로 이동할 수 있어요. IntelliJ IDEA는 문맥에 민감한 제안을 제공해서 문법이 올바르고 코드가 컴파일 가능한지 확인하도록 도와줘요. Alt+Enter는 문제를 고치는 데 도움이 되는 제한된 제안 목록을 제공하고, 명령 완성(..)은 현재 문맥에 관련된 모든 명령을 제공해요.
개발 속도를 높이기 위해 코드 생성(generate code)을 사용할 수도 있어요. IntelliJ IDEA는 생성자, getter와 setter, toString(), equals()와 hashCode() 메서드 등을 생성할 수 있어요.
IntelliJ IDEA는 작성할 때 코드의 형식을 관리해줘요. 필요하면 단축키 ⌘⌥L(macOS) 또는 Ctrl+Alt+L(Windows/Linux)을 사용하거나, 빈 줄에 ..을 입력하고 Reformat Code를 선택해 코드를 명시적으로 다시 포맷할 수 있어요.
애플리케이션 실행하기
IDE를 사용하는 큰 장점 중 하나는 명령줄에서 먼저 수동으로 컴파일하지 않고도 코드를 직접 실행할 수 있다는 거예요.
축약형 소스 파일이 있다면 main 메서드 선언 근처의 여백(gutter)에 있는 초록색 Run 버튼을 클릭하거나, 단축키 ⌃⇧R(macOS) 또는 Ctrl+Shift+F10(Windows/Linux)을 사용해 HelloWorld 애플리케이션을 에디터에서 직접 실행할 수 있어요.
대안으로, 오른쪽 위의 초록색 Run 버튼이나 단축키 ⌃R(macOS) 또는 Ctrl+F10(Windows/Linux)을 사용해 최신 파일을 실행할 수도 있어요.
클래스가 있다면 클래스 선언이나 main 메서드 선언 근처 여백의 초록색 Run 버튼을 클릭해 HelloWorld 애플리케이션을 실행할 수 있어요.
애플리케이션에 인자를 전달하려면 실행 구성(Run Configurations)에서 할 수 있어요.
실행 구성을 편집하려면 실행/디버그 구성 선택기에서 구성을 선택하세요. 현재 구성 옆의 아래쪽 화살표나 실행 구성 오른쪽의 점 세 개를 클릭하고 Edit Configurations를 선택하면 돼요.
Run/Debug Configurations 팝업이 나타나는데, 여기서 JVM 옵션을 수정하고, 프로그램 인자를 추가하는 등 많은 작업을 할 수 있어요.
이미지: Run / Debug Configuration
테스트
코드를 테스트하면 코드가 예상대로 동작하는지 확인하는 데 도움이 돼요. 애플리케이션을 직접 실행해 스스로 테스트하거나, 코드를 검증해주는 자동화된 테스트를 추가할 수 있어요. 무엇을 어떻게 테스트할지 고민하는 것은 문제를 더 작은 조각으로 나누는 데 도움이 돼요. 그러면 더 나은 해결책을 더 빨리 얻을 수 있어요!
예를 들어, 값 목록의 평균을 계산하는 다음 메서드를 포함한 Calculator 클래스가 있고, 평균이 올바르게 계산되는지 확인하고 싶다고 해볼게요.
public class Calculator {
public static double average(int[] numbers) {
int sum = 0;
for (int number : numbers) {
sum += number;
}
double avg = (double) sum / numbers.length;
return avg;
}
}
IntelliJ IDEA는 코드에 테스트를 추가하는 것을 쉽게 만들어줘요. macOS의 ⇧⌘T 또는 Windows/Linux의 Ctrl+Shift+T 단축키로 특정 클래스의 테스트로 이동할 수 있어요. 아직 테스트 클래스가 없다면 IntelliJ IDEA가 하나 만들어줘요. 이 클래스는 src/test/java 디렉터리에 생성돼요.
Create test 팝업에서 Testing library를 선택할 수 있어요.
IntelliJ IDEA는 여러 테스트 라이브러리를 지원하는데, 여기에는 Java 개발자가 가장 많이 쓰는 테스트 라이브러리인 JUnit 5가 포함돼요. 프로젝트에 JUnit 5가 아직 없다면 IntelliJ IDEA가 "JUnit5 library not found in the module."이라고 알려줘요. Fix를 클릭하면 IntelliJ IDEA가 직접 고쳐줘요. IntelliJ IDEA는 개발자가 필요한 최신 프레임워크와 라이브러리를 지원해요. 최신 JUnit 버전인 JUnit 6을 사용하고 싶다면 Testing library 드롭다운을 열고 JUnit 6을 선택하세요.
빌드 시스템으로 Maven을 사용한다면 pom.xml의 <dependencies> 섹션에 JUnit 의존성인 junit-jupiter가 추가된다는 점을 기억하세요.
의존성이 프로젝트에서 올바르게 작동하도록, 오른쪽 위의 팝업을 클릭하거나 단축키 ⇧⌘I(macOS) 또는 Ctrl+Shift+O(Windows/Linux)을 사용해 Load Maven Changes를 실행하세요.
테스트를 추가하려면 테스트 파일로 돌아가세요. IntelliJ IDEA가 테스트 생성을 도와줄 수 있어요. 테스트 클래스에서 Generate(macOS의 ⌘N 또는 Windows/Linux의 Alt+Insert)를 사용하고 Test Method를 선택해 테스트를 추가하세요. 의도한 동작을 설명하는 이름을 테스트에 짓고 관련 테스트 코드를 추가하세요.
예를 들어 average() 메서드가 양수 배열의 평균을 올바르게 계산하고, 빈 배열에 대해서는 0을 반환하는지 확인해볼게요. 음수 배열, 양수와 음수가 섞인 배열 등 다양한 시나리오에 대한 추가 테스트를 추가하고 싶을 수도 있어요.
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CalculatorTest {
@Test
void shouldCalculateAverageOfPositiveNumbers() {
int[] numbers = {1, 2, 3, 4, 5};
double actualAverage = Calculator.average(numbers);
double expectedAverage = 3.0;
assertEquals(expectedAverage, actualAverage);
}
@Test
void shouldReturnZeroAverageForEmptyArray() {
int[] numbers = {};
double actualAverage = Calculator.average(numbers);
double expectedAverage = 0;
assertEquals(expectedAverage, actualAverage);
}
}
테스트 클래스에서 Run All Tests(macOS의 ⌃⇧R 또는 Windows/Linux의 Ctrl+Shift+F10)를 선택할 수 있어요.
이 예시에서 두 번째 테스트는 실패해요. 테스트는 빈 배열의 평균으로 0을 기대했지만, NaN(숫자가 아님)이 나왔거든요. 디버거로 그 이유를 알아볼게요.
디버깅
코드가 어떻게 실행되는지 보고 싶을 수 있어요. 코드가 어떻게 동작하는지 이해하기 위해서이거나, 버그나 실패하는 테스트(위와 같은)를 고쳐야 할 때죠. 디버거(debugger)로 코드를 실행해 서로 다른 시점의 변수 상태와 호출 스택(프로그램이 실행될 때 메서드가 호출되는 순서)을 볼 수 있어요. 그러려면 먼저 코드에 중단점(breakpoint)을 추가해야 해요.
중단점을 추가하려면 실행을 멈추고 싶은 코드 줄의 여백(gutter)을 클릭하세요. 대안으로 해당 줄에 캐럿을 놓고 ⌘F8(macOS) 또는 Ctrl+F8(Windows/Linux)을 누르세요. Debug 옵션으로 테스트나 애플리케이션을 실행할 수 있어요. 여백의 Run 버튼을 마우스 오른쪽 클릭하고 목록에서 Debug 옵션을 선택하거나, 오른쪽 위의 Debug 버튼을 선택하면 돼요.
실행이 중단점에서 멈추므로 애플리케이션의 상태를 조사할 수 있어요. 변수와 객체의 현재 값을 볼 수 있어요. 표현식을 평가해서 현재 값을 보고 더 자세한 내용을 살펴볼 수도 있어요. 표현식을 변경해 다른 결과를 평가할 수도 있어요. 호출된 메서드 안에서 무슨 일이 일어나는지 보기 위해 메서드 안으로 들어가서(단축키 F7 또는 Debug 도구 창의 해당 버튼) 계속 실행하거나, 메서드가 호출되더라도 다음 줄로 넘어가려면 한 줄씩 건너뛰며(단축키 F8 또는 Debug 도구 창의 해당 버튼) 실행할 수 있어요. 관심사에 따라 선택하면 돼요. 마지막으로 프로그램을 재개(resume)해 테스트 실행을 마칠 수 있어요.
이전 섹션의 실패한 테스트를 디버깅해볼게요. 코드에서 4번째 줄에 중단점을 놓으세요. 실패한 테스트를 디버거로 실행하세요. 8번째 줄에 도달할 때까지 코드를 한 줄씩 실행하며 변수 값을 관찰하세요. 8번째 줄에 도달하면 sum / numbers.length를 선택하고 마우스 오른쪽 클릭으로 컨텍스트 메뉴를 열어 Evaluate Expression을 선택하세요. Enter를 눌러 선택한 표현식을 평가하세요. sum / numbers.length가 java.lang.ArithmeticException: / by zero를 낸다는 걸 볼 수 있어요. 빈 배열은 길이가 0이고 Java는 0으로 나누는 것을 허용하지 않기 때문이에요.
(double) sum / numbers.length를 평가하면 결과는 NaN이에요. 테스트는 0을 기대했으므로 실패해요.
이 시나리오는 초기 구현에서 고려되지 않았어요. 입력으로 빈 배열이 주어졌을 때 0을 반환하도록 메서드를 변경해 이 문제를 고칠 수 있어요.
public class Calculator {
public static double average(int[] numbers) {
if (numbers.length == 0) {
return 0;
}
int sum = 0;
for (int number : numbers) {
sum += number;
}
double avg = (double) sum / numbers.length;
return avg;
}
}
이제 테스트를 실행하면 모두 통과하는 걸 볼 수 있어요.
디버깅에 대한 자세한 내용은 Debugging in Java를 참고하세요.
코드 리팩터링하기
코드로 작업하다 보면 기능을 바꾸지 않으면서 작은 개선을 하고 싶을 때가 있어요. 리팩터링(refactoring)을 사용해 코드를 재구성할 수 있어요.
IntelliJ IDEA는 코드를 리팩터링하도록 도와주는 여러 방법을 제공해요.
명령 완성(Command completion)은 ..을 입력하면 에디터에서 관련 명령을 제공해요. 예를 들어 변수나 메서드 이름을 바꾸려면 변수나 메서드 이름 뒤에 ..을 입력하고 Rename을 선택하세요.
대안으로, 특정 리팩터링 옵션에 대한 단축키를 사용할 수 있어요. 예를 들어:
- Refactor | Rename(macOS의 ⇧F6 또는 Windows/Linux의 Shift+F6)으로 클래스, 변수, 메서드 이름 바꾸기.
- 필요에 따라 변수 인라인화(Inline variables)(macOS의 ⌘⌥N 또는 Windows/Linux의 Ctrl+Alt+N) 또는 변수 추출(extract variables)(macOS의 ⌘⌥V 또는 Windows/Linux의 Ctrl+Alt+V).
- 메서드 추출(macOS의 ⌘⌥M 또는 Windows/Linux의 Ctrl+Alt+M)과 의미 있는 이름 부여로 긴 메서드를 더 작은 부분으로 나누기.
마지막으로 Alt+Enter 또는 명령 완성을 사용해 코드를 리팩터링하고 변환하는 방법을 호출할 수 있어요.
단축키 ⌃T(macOS) 또는 Ctrl+Alt+Shift+T(Windows/Linux)로 리팩터링 메뉴를 열어 가능한 것을 확인하세요.
이 모든 옵션은 코드를 더 친숙한 스타일로 리팩터링하거나, 새로운 관용구와 언어 기능을 사용하도록 도와줘요.
리팩터링 후에는 코드가 여전히 예상대로 작동하는지 확인하려고 반드시 테스트를 다시 실행하는 것을 잊지 마세요!
코드 문서화하기
코드에 문서를 추가할 수 있어요. IntelliJ IDEA는 기본적으로 활성화된 문서 주석 완성을 제공해요. 선언 앞에 /**를 입력하고 Enter를 누르세요. IntelliJ IDEA가 문서 주석을 자동 완성해줘요.
IntelliJ IDEA는 Reader Mode를 선택해 Javadoc 주석을 쉽게 이해하고 읽을 수 있는 방법을 제공해요. 에디터에서 ^⌥Q(macOS) 또는 Ctrl+Alt+Q(Windows/Linux)를 사용해 Toggle Rendered View를 실행하세요. 모든 주석을 리더 모드로 표시하려면 여백의 아이콘을 마우스 오른쪽 클릭해 Render All Doc Comments를 선택하세요.
Java 23 이상을 사용하고 Javadoc을 Markdown으로 변환하고 싶다면, IntelliJ IDEA가 이를 변환하는 빠른 수정(quick-fix)을 제공해요.
검색과 탐색
IntelliJ IDEA는 코드베이스 탐색 방법도 제공해요. 예를 들어 파일 사이를 앞뒤로 이동하고, 사용처(usages)와 선언을 찾고, 인터페이스와 구현을 찾고, 최근에 연 파일과 위치를 보거나, 이름으로 창을 여는 것까지 가능해요.
널리 쓰이는 검색 방법 중 하나가 Search Everywhere(Shift 두 번)예요. Search Everywhere는 프로젝트 파일과 디렉터리뿐 아니라 프로젝트 설정과 IntelliJ IDEA 설정까지 검색할 수 있게 해줘요. 검색 결과를 Classes, Files, Symbols, Actions, Text로 좁히고 싶다면 Tab 키로 해당 탭으로 이동하세요.
또 다른 인기 있는 검색 방법은 Find in Files예요. 주 메뉴에서 Edit | Find | Find in Files를 사용하거나 단축키 ⌘⇧F(macOS) 또는 Ctrl+Shift+F(Windows/Linux)을 사용해 Find in Files를 열 수 있어요. 결과를 In Project에서 Module, Directory, Scope로 좁힐 수 있어요.
요약
이 글에서는 IntelliJ IDEA가 코드 작성 중 코드 제안과 완성, 애플리케이션 실행, 테스트 추가, 코드가 어떻게 실행되는지 알아내는 데 도움이 되는 디버거 사용, 코드 리팩터링 등에 어떻게 도움을 줄 수 있는지 살펴봤어요.
IntelliJ IDEA는 계속 개선되고 진화하며 새 기능과 새로운 통합을 추가하고 있어요. 문서, 블로그, YouTube 채널, 가이드를 살펴보면 코딩 실력을 더 다듬을 수 있어요.
더 알아보기 (Learn more)
- IntelliJ IDEA 공식 문서 — 시작하기와 전반적인 사용법
- IntelliJ IDEA 웹사이트 — 다운로드와 에디션 정보
- Getting Started with Java — Java 입문 과정과 JDK 설정
- Debugging in Java — Java 디버깅 심화