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

강의

  • 리뷰
  • 회사 소개
시작
학습 시작
Start learning now
  • 진행 상황
  • 코스
  • 퀘스트 맵
  • 레슨
  • Observer 패턴 (관찰자)

    JAVA 25 SELF
    레벨 50,레슨 3
    행동 패턴 "관찰자(Observer)": Subject와 Observer의 역할, addObserver/ removeObserver로 구독/해지, 그리고 notifyObservers 메서드로 알림을 발송합니다. Java의 이벤트 모델과의 연관: button. addActionListener( listener) ; → actionPerformed() 호출. 예제 실습(온도계와 에어컨, 미니 카운터와 람다)과 함께, 왜 java.util.Observable/ Observer가 폐기되었는지와 현대적인 접근법을 살펴봅니다.
    사용 가능
  • EDT 스레드와 UI의 오래 걸리는 작업

    JAVA 25 SELF
    레벨 50,레슨 4
    이 강의에서는 UI 이벤트 처리 스레드인 EDT(Swing)와 그에 상응하는 JavaFX Application Thread가 무엇인지, 왜 UI 컴포넌트가 스레드 세이프하지 않은지, 그리고 무거운 작업 중 창이 ‘먹통’처럼 보이는 이유를 설명합니다. 또한 올바른 기법을 보여 줍니다: new Thread(...)로 계산을 백그라운드로 분리하고, SwingUtilities.invokeLater와 Platform.runLater 호출로 인터페이스를 갱신하며, 진행률·취소·에러 처리를 위해 고수준 도구인 SwingWorker<T, V>와 Task<V>/ Service<V>를 사용하는 방법.
    사용 가능
  • 멀티스레딩 입문: 왜 필요한가

    JAVA 25 SELF
    레벨 51,레슨 0
    프로그램에 스레드와 병렬성이 필요한 이유: 반응성 높은 인터페이스부터 프로세서의 모든 코어 활용까지. 프로세스와 스레드의 차이, JVM에서 메인 스레드 main의 역할, 실용적 사례들(UI, 서버, 파일 처리)과 위험 요소: race condition, deadlock, 그리고 synchronized 같은 기본 동기화 도구를 다룹니다. 또한 Thread로 두 작업을 병렬로 실행하는 간단한 예제를 보여 줍니다.
    사용 가능
  • 스레드 시작하기: Thread와 Runnable, 문법

    JAVA 25 SELF
    레벨 51,레슨 1
    이 강의에서는 Java에서 스레드를 시작하는 방법을 다룹니다: 클래스 Thread와 인터페이스 Runnable을 익히고, start()를 올바르게 호출하며 run()과 혼동하지 않는 법을 배웁니다. 익명 클래스와 람다식을 활용하고, 여러 스레드를 실행해 수명 주기( NEW → RUNNABLE → TERMINATED)를 살펴봅니다. 또한 Thread.currentThread(), getName(), join()을 통한 대기, IllegalThreadStateException과 같은 흔한 오류에 대해 이야기합니다.
    사용 가능
  • 스레드의 상태와 생명 주기

    JAVA 25 SELF
    레벨 51,레슨 2
    Java에서 스레드의 생명 주기를 살펴봅니다: Thread.State (
    NEW
    ,
    RUNNABLE
    ,
    BLOCKED
    ,
    WAITING
    ,
    TIMED_WAITING
    ,
    TERMINATED
    )에서 상태 전이까지. Thread.sleep(...), join(), interrupt()로 스레드를 제어하고, isAlive()와 getState()로 상태를 진단하며, stop()/ suspend()/ resume() 같은 오래된 메서드는 피합니다. 마지막에는 실무 팁과 자주 하는 실수를 다룹니다.
    사용 가능
  • 스레드의 매개변수와 우선순위

    JAVA 25 SELF
    레벨 51,레슨 3
    클래스의 생성자를 통해 Runnable을 구현하는 객체에 매개변수를 안전하게 전달하는 방법, 람다식을 언제 쓰면 좋은지, 그리고 왜 필드를 final로 두는 것이 좋은지. 스레드 우선순위 살펴보기: setPriority/ getPriority 메서드, Thread.MIN_PRIORITY, Thread.NORM_PRIORITY, Thread.MAX_PRIORITY 상수와 스케줄러에 미치는 영향. 또한 — 생성자와 setName/ getName으로 스레드 이름 지정, 실전 예제와 흔한 실수(공유 Runnable, 세터 사용, 우선순위에 대한 과도한 기대).
    사용 가능
  • 경쟁 상태 (race condition)

    JAVA 25 SELF
    레벨 51,레슨 4
    이 강의에서는 경쟁 상태(race condition)가 무엇인지 살펴봅니다: 여러 스레드가 동시에 공유 데이터에 접근하고, 결과가 스케줄링 순서에 따라 달라지는 상황입니다. counter ++ 인크리먼트 예제로, 왜 이 연산이 원자적이지 않으며 인크리먼트가 어떻게 소실되는지 보여줍니다. 또한 은행 계좌 실습 사례, 프로덕션에서의 영향, 그리고 보호 방법을 다룹니다: synchronized, java.util.concurrent.atomic의 원자적 타입들(예: AtomicInteger), 그리고 불변성. 마지막에는 “자주 하는 실수” 섹션으로 마무리하며, 왜 Thread 버그가 테스트로 잘 잡히지 않고, 그것을 Thread. sleep( 1)로 “치료”하는 것이 무의미한지 설명합니다.
    사용 가능
  • 공유 자원과 동기화: 동시 접근 문제

    JAVA 25 SELF
    레벨 52,레슨 0
    이 강의는 멀티스레드 애플리케이션에서 공유 자원이 무엇인지, 왜 race condition(경쟁 상태)과 ‘lost update(업데이트 손실)’가 발생하는지, 그리고 synchronized로 데이터를 어떻게 보호하는지에 대해 다룹니다. 동기화의 기본 기법(메서드와 블록)을 살펴보고, java.util.concurrent의 현대적 도구들( Lock, ReentrantLock, Semaphore 등)을 이야기하며, 카운터 인크리먼트 실습과 전형적인 실수들( i ++의 비원자성, 잘못된 락 객체, volatile에 관한 미신)을 확인합니다.
    사용 가능
  • synchronized, volatile: 문법과 사용법

    JAVA 25 SELF
    레벨 52,레슨 1
    멀티스레딩 실습형 강의: 키워드 synchronized가 어떻게 동작하는지(블록과 메서드, 객체 모니터와 클래스 수준 잠금 ClassName.class), volatile을 통한 변경 가시성과 연산의 원자성의 차이는 무엇인지, 왜 boolean 플래그를 volatile로 두면 편하고 증가 연산 count ++는 동기화가 필요한지 살펴봅니다. 언제 synchronized를, 언제 — volatile을 선택할지 비교하고, 흔한 실수를 정리합니다.
    사용 가능
  • ReentrantLock 및 ReadWriteLock: 차이점과 예제

    JAVA 25 SELF
    레벨 52,레슨 2
    클래식한 동기화 방식인 synchronized와 패키지 java.util.concurrent.locks의 보다 유연한 프리미티브인 ReentrantLock과 ReadWriteLock을 실무적으로 비교합니다. 잠금을 명시적으로 제어하는 방법( lock()/ unlock(), 타임아웃이 있는 tryLock()), ReentrantReadWriteLock으로 읽기 병렬성을 확장하는 방법, “공정성”( fair 모드)이 무엇인지, 각 도구가 적합한 상황과 가장 자주 발생하는 실수는 무엇인지 살펴봅니다.
    사용 가능
  • 뮤텍스와 세마포어: 문법과 과제

    JAVA 25 SELF
    레벨 52,레슨 3
    이 강의에서는 Java의 핵심 동기화 프리미티브를 살펴봅니다. synchronized와 ReentrantLock 클래스를 사용해 임계 구역을 보호하는 방법( lock()/ unlock() 메서드, try- finally 구문)과, Semaphore로 병렬성을 제한하는 방법( acquire()/ release() 메서드)을 다룹니다. 표로 뮤텍스와 세마포어를 비교하고, 실무 사례(은행, 접속 제한이 있는 서버)와 교착 상태(deadlock) 및 성능 저하를 유발하는 전형적인 실수를 함께 살펴봅니다.
    사용 가능
  • 동기화 시 흔한 실수 분석

    JAVA 25 SELF
    레벨 52,레슨 4
    Java에서의 멀티스레딩에서 흔히 발생하는 실수를 실전적으로 분석합니다: ReentrantLock과 Semaphore에서 unlock()/ release() 호출을 잊는 문제( try- finally로 해결), synchronized에 잘못된 모니터를 선택하는 문제, 상호 교착 상태(deadlock)와 락 획득 순서, 과도한 동기화, 그리고 volatile의 적용 한계와 AtomicInteger로의 대체. 예제, 팁, 쉬운 비유까지 — 코드가 멈춰 서지 않도록.
    사용 가능
  • 1
  • ...
  • 22
  • 23
  • 24
  • 25
  • 26
  • ...
  • 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