CodeGym
프로모션
학습
강좌
과제
설문 & 퀴즈
게임
도움말
일정
커뮤니티
사용자
포럼
채팅
아티클
성공 사례
활동
후기
구독
라이트 테마

강의

  • 리뷰
  • 회사 소개
시작
학습 시작
Start learning now
  • 진행 상황
  • 코스
  • 퀘스트 맵
  • 레슨
  • module-info.java: 문법, 모듈 생성

    JAVA 25 SELF
    레벨 60,레슨 1
    module-info.java 파일이 무엇인지, 프로젝트에서 어디에 위치하는지, 그리고 키워드 module로 모듈을 선언하는 방법을 알아봅니다. exports로 API를 공개하고, requires로 의존성을 연결하는 법을 배우며, 추가 지시어들( opens, uses, provides ... with)도 살펴봅니다. 강의에는 예제, 모듈 명명 규칙, 프로젝트 구조의 실전 분석, 그리고 모듈 빌드 시 흔한 오류가 포함되어 있습니다.
    사용 가능
  • 모듈을 통한 캡슐화: export와 import

    JAVA 25 SELF
    레벨 60,레슨 2
    Java 9+가 클래스와 패키지 위에 모듈 단위 캡슐화를 어떻게 추가했는지: 패키지가 module-info.java에서 exports로 명시적으로 열리지 않는 한, 심지어 public 클래스도 숨겨집니다. requires로 의존성을 연결하는 법, exports to로 가시성을 제한하는 법, module 수준이 private/ public과 어떻게 다른지, 그리고 어떤 컴파일 오류(예: “package ... is not visible”, “cannot access ...”)가 여러분이 exports나 requires를 빼먹었음을 알려주는지 살펴봅니다.
    사용 가능
  • 프로젝트 모듈 분할: 모범 사례

    JAVA 25 SELF
    레벨 60,레슨 3
    Java의 모듈러 아키텍처에 대한 실무 가이드: 코드를 언제, 왜 모듈로 나눌지, 대표적인 패턴(“양파” 아키텍처, api/ impl 분리, 테스트 모듈), module-info.java와 requires/ exports 키워드를 통한 의존성 설정, 3개 모듈 실전 예제, Maven/ Gradle 및 IntelliJ IDEA 연동, 그리고 흔한 실수 분석(순환 의존성, export되지 않은 패키지, 잘못된 --module-path).
    사용 가능
  • 다중 모듈 프로젝트 빌드: Maven, Gradle, IDEA

    JAVA 25 SELF
    레벨 60,레슨 4
    Java에서 모듈식 프로젝트를 빌드하는 방법: classpath와 module-path의 차이, 언제 --module-path 플래그를 사용할지, Maven과 Gradle에서 다중 모듈 구조를 설정하는 방법, 그리고 IntelliJ IDEA에서 실행하는 방법. module-info.java가 있는 모듈 구조, requires/ exports를 통한 의존성, 플러그인 구성과 빌드 시 자주 발생하는 오류를 보여 드립니다.
    사용 가능
  • ProcessBuilder — 외부 프로세스 실행

    JAVA 25 SELF
    레벨 61,레슨 0
    Java에서 ProcessBuilder 클래스를 사용해 외부 명령과 유틸리티를 실행하는 방법을 살펴봅니다: Runtime. getRuntime(). exec() 대비 장점, directory()로 작업 디렉터리를 설정하는 법, environment()로 환경 변수를 구성하는 법, 그리고 start(), waitFor(), getInputStream()/ getErrorStream()/ getOutputStream() 스트림으로 프로세스를 제어하는 방법을 다룹니다. 크로스플랫폼 이슈( cmd.exe/ ls), stdout/ stderr 처리와 흔한 실수도 함께 논의합니다.
    사용 가능
  • 프로세스 출력 읽기, stdin/stdout 다루기

    JAVA 25 SELF
    레벨 61,레슨 1
    Java에서 외부 프로세스를 다루는 실습: stdout를 Process.getInputStream()으로 읽고, stderr의 오류는 Process.getErrorStream()으로 받고, stdin에는 Process.getOutputStream()으로 쓰는 방법, 그리고 편리한 메서드 inputReader()/ errorReader()/ outputWriter() 사용법. java -version 같은 명령의 특성, deadlock을 피하기 위한 스트림 병렬 읽기, 인코딩 처리( "UTF-8"), 그리고 Python 스크립트와의 간단한 브리지도 살펴봅니다.
    사용 가능
  • 프로세스 생명 주기 관리

    JAVA 25 SELF
    레벨 61,레슨 2
    Java에서 외부 프로세스를 제어하는 실전: waitFor()로 종료를 기다리기(타임아웃 포함), 종료 코드 읽기, destroy()/ destroyForcibly()로 올바르게 중지하기, 출력 스트림과 예외를 잊지 않으면서 멈춤과 좀비 프로세스를 방지하기. 크로스 플랫폼 특성과 흔한 실수를 함께 다룹니다.
    사용 가능
  • 프로세스와의 대화형 상호작용

    JAVA 25 SELF
    레벨 61,레슨 3
    이 강의에서는 Java에서 외부 프로그램과 “대화형”으로 소통하는 방법을 살펴봅니다: stdin에 쓰고, stdout과 stderr에서 읽고, 상호 교착 상태( deadlock)를 피하며, ExecutorService로 출력을 병렬 처리하고, 스트림을 올바르게 닫은 뒤 ProcessBuilder를 통해 Process의 생명 주기를 관리하는 방법까지 다룹니다. 또한 Python 대화형 스크립트와 bc 유틸리티 예제를 보고, 버퍼링의 함정과 flush() 필요성도 살펴봅니다.
    사용 가능
  • 프로세스 작업 시 흔한 오류 분석

    JAVA 25 SELF
    레벨 61,레슨 4
    Java에서 외부 프로세스를 안정적으로 다루기 위한 실용 가이드: 읽히지 않은 출력 스트림 stdout/ stderr 때문에 발생하는 멈춤을 피하고, 출력 인코딩(예: UTF-8, CP866)을 올바르게 설정하며, 명령의 크로스 플랫폼 차이( ls vs dir)를 고려하고, process.exitValue()로 권한과 종료 코드를 처리하고, 리소스를 누수 없이 닫으며 대화형 상호작용의 상호 교착을 피하는 방법을 다룹니다. 또한 ProcessBuilder의 올바른 사용, 스트림 병렬 읽기(스레드/ ExecutorService), process.destroy()를 통한 올바른 종료, File.separator로 플랫폼 독립 경로를 사용하는 방법을 설명합니다.
    사용 가능
  • 리플렉션 입문: Class 클래스, 왜 필요한가

    JAVA 25 SELF
    레벨 62,레슨 0
    Java에서 리플렉션이 무엇이며 프레임워크와 도구에 왜 필요한지, 리플렉션의 심장인 Class 객체가 어떻게 동작하는지, 그리고 그것을 얻는 방법들( .class, getClass(), Class.forName())을 살펴봅니다. 언제 리플렉션을 써야 하고 언제 쓰지 않아야 하는지 이야기하고, 메타데이터(이름, 패키지, 슈퍼클래스, 인터페이스) 얻기 예시를 본 뒤, 미니 유틸리티 “이건 어떤 클래스?”와 흔한 오류들( ClassNotFoundException, 성능, 보안)을 다룹니다.
    사용 가능
  • 클래스, 필드, 메서드 정보 가져오기

    JAVA 25 SELF
    레벨 62,레슨 1
    이 강의에서는 Java의 리플렉션을 다룹니다. Class API를 통해 필드( getFields()/ getDeclaredFields()), 메서드( getMethods()/ getDeclaredMethods()), 생성자( getConstructors()/ getDeclaredConstructors()), 애너테이션( getAnnotations()) 정보를 얻는 방법을 배웁니다. 또한 Modifier를 통해 한정자( public, private, protected, static, final)를 확인하고, “public vs declared” 차이를 이해한 뒤, 클래스 인스펙터 미니 유틸리티를 만들고 시각적 다이어그램을 살펴봅니다.
    사용 가능
  • 리플렉션의 보안, 제약, 그리고 대안

    JAVA 25 SELF
    레벨 62,레슨 2
    이번 강의에서는 리플렉션의 위험과 제약을 다룹니다: setAccessible( true)로 캡슐화를 우회하는 방법, final 필드를 바꾸려는 시도와 JVM 최적화 때문에 왜 위험한지; SecurityManager의 변화, 그리고 모듈 시스템(Java 9+)이 InaccessibleObjectException으로 이어지는 이유. 또한 성능과 타입 안전성 손실, 현대적 대안들( record, sealed, pattern matching, APT, DI)과 모범 사례를 이야기합니다. 마지막에는 JVM 매개변수 --add-opens를 사용하는 실습 예제를 보여 드립니다.
    사용 가능
  • 1
  • ...
  • 26
  • 27
  • 28
  • 29
  • 30
학습
  • 등록
  • Java 과정
  • 과제 도움
  • 요금
  • Java 문법
커뮤니티
  • 사용자
  • 아티클
  • 포럼
  • 채팅
  • 성공 사례
  • 활동
  • 제휴 프로그램
회사
  • 회사 소개
  • 연락처
  • 후기
  • 보도자료실
  • CodeGym for EDU
  • FAQ
  • 지원
CodeGymCodeGym 은(는) 처음부터 Java 프로그래밍을 배우기 위한 온라인 코스입니다. 이 과정은 초보자가 Java를 마스터하기에 완벽한 방법입니다. 즉시 검증 기능이 포함된 1200개 이상의 과제와 Java 기초 이론의 필수 범위를 제공합니다. 학습 성공을 돕기 위해 퀴즈, 코딩 프로젝트, 효율적인 학습법 관련 콘텐츠, Java 개발자 경력 관련 자료 등 동기 부여 기능들을 구현했습니다.
팔로우하기
인터페이스 언어
English Deutsch Español हिन्दी Français Português Polski বাংলা 简体中文 मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語
한국어
Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
"Programmers Are Made, Not Born" © 2026 CodeGym
MastercardVisa
"Programmers Are Made, Not Born" © 2026 CodeGym