inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

private 접근 제어자

미해결

김영한의 실전 자바 - 기본편

[질문 내용] Speaker 클래스에서 int volume를 private로 지정하였을 때 volume 필드는 외부에서 접근을 못하고 Speaker 내부에서만 접근을 할 수 있다 설명했습니다. 그렇다면, 예를 들어 volume 멤버 변수를 Speaker 클래스 내부에서 10을 대입한다고 했을 때 volume = 10; 라고 초기화를 하려고 하면 volume 변수가 존재하지 않는 오류가 발생합니다. 분명히 Speaker 내부 에서 선언된 volume 필드를 쓰려고 하는데 왜 자기 자신의 클래스에서 생성된 변수를 사용하지 못하는 거죠?

  • java
  • 객체지향
댓글 1 좋아요 -1 조회수 141

소스코드가 없습니다 도와주세요

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

제가 뭘 틀렸는지 잘 모르겠습니다.. src 파일에 들어가면 선생님 강의에선 소스코드들이 주루룩 뜨는데, 전 안 뜨고 'Main' 하나밖에 없습니다. 애초에 java-start 파일 하나만 있고 java-start 압축파일은 안 보입니다. 왜 이러는걸까요??? ㅠㅠㅠㅠㅠㅠ 소스코드들이 왜 없는건지 모르겠습니다

  • java
  • 객체지향
오리너구리푸딩 댓글 2 좋아요 0 조회수 333

Api 관련질문

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

@GetMapping("hello-api") @ResponseBody public Hello helloApi(@RequestParam("name") String name){ Hello hello = new Hello(); hello.setName(name); return hello; } static class Hello{ private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } } 위처럼 APi사용하려는데 이렇게 한국어로 입력 시 문자가 깨지는 현상이 발생합니다 설정은 다음과 같습니다

  • java
  • spring
  • mvc
  • spring-boot
DG Y 댓글 1 좋아요 0 조회수 85

다운로드 소스코드가 계속 안됩니다 ㅠㅠ 도와주세요..

미해결

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

[질문 내용] 그냥 나오는대로 다 예 예 누르고 맞게 한 것 같은데 계속 다른 위치에 저장하라고 뜹니다 선생님 ㅠㅠ 프로젝트를 몇 번이나 삭제하고 다시 깔고 실행했는데도 다운로드 소스코드가 실행이 안됩니다 파일 다운로드 위치도 계속 바꿔봤는데 똑같이 뜹니다 이유가 뭘까요? ㅠㅠㅠ...

  • java
  • InteliJ
댓글 1 좋아요 0 조회수 388

기본 생성자 사용자 정의 시 null

미해결

김영한의 실전 자바 - 기본편

[질문 내용] 문제 풀이 과정에서 Book 클래스에 기본 생성자를 사용자가 직접 정의해서 만들었는데, 김영한 강사님께서 값을 비워두면 안 된다고 한 말씀이 의아해서 질문 드립니다. 교육 차원으로 문제에서 null값이 아닌 빈 값으로 보여주게 하기 위해서 this("", "", 0);으로 표시한 것인지, 아니면 실무에서도 기본 생성자를 개발자가 정의할 때에도 꼭 값을 비워두면 안 된다는 것인지 궁금합니다.

  • java
  • 객체지향
soojinkimss 댓글 1 좋아요 0 조회수 147

this 이해가 잘 안돼요..

미해결

김영한의 실전 자바 - 기본편

[질문 내용] 김영한 강사님께서는 this가 예를 들어 nameField에서 먼저 지역변수(매개변수(에서 같은 이름이 있는지 찾고 없으면 멤버 변수에서 찾는다고 애기해주셨고 자바가 자동으로 this를 해준다고도 설명해주셨는데, 자바 입문편에서 배웠을 때 자신의 클래스에 변수를 타입지정하여 선언하면 하위 메소드나 앞으로도 타입 없이 변수명만으로 생존가능한 것으로 알고있습니다. 물론 매개변수의 이름과 멤버변수 이름이 동일하면 왜 this를 써야하는지는 알겠으나, 매개변수명과 멤버변수명이 다르다면 자바가 this를 자동으로 설정하는 설명 전에 일단 멤버변수와 매개변수가 구분을 지을 수 있으니 굳이 this를 설명할 이유가 있나 싶습니다. 애초에 멤버변수를 선언을 했으니 멤버변수를 자유롭게 사용할 수 있는데 거기에 this가 없어도 된다는 내용이 아이러니 하다고 생각이 드네요. 좀 디테일하게 알려주실 수 있을까요?

  • java
  • 객체지향
soojinkimss 댓글 1 좋아요 0 조회수 224

scondTask관련 질문있습니다!

해결됨

실리콘밸리 엔지니어와 함께하는 Gradle

안녕하세요 강사님 task firstTask { println "Hello World" doFirst(){ println "First action!!" } doLast(){ println "Last action!!" } } task secondTask { doFirst(){ println "First action in secondTask" } doLast(){ println "Last action in secondTask" } } 위와 같이 task를 작성하였습니다! secondTask를 작성할 때는 Hello World를 지운 상태로 실행을 했는데도 gradle sT를 이용해서 sT를 실행하는 터미널 명령어를 사용했습니다! > Configure project : Hello World 가 터미널에 출력되는 이유를 알 수 있을까요??

  • java
  • scala
  • gradle
  • scala-3
  • compiler
hong090992 댓글 2 좋아요 0 조회수 190

인접선택자에 대한 질문드립니다!

미해결

HTML+CSS+JS 포트폴리오 실전 퍼블리싱(시즌1)

확장선택자와 함께 가상클래스 checked 실전 퍼블리싱 06(탭 콘텐츠 - Slide) 강의에서 인접선택자로 아래 코드와 같이 input 태그의 해당 id값을 체크 시 .slide의 자식인 .slide-inner에 left값을 변경해준다고 표시되어져있습니다. 여기에서 ~가 없으면 왜 코드가 제대로 작동되지 않는건가요? ~ 가 없으면 input부분에 해당하는 태그의 자식요소만 올 수 있다는 걸로 이해하는게 맞나요?? (아래 코드는 질문에 필요한 html과 css 부분만 올렸습니다) (+ 항상 질문에 답변 달아주셔서 감사합니다!ㅎㅎ) input[id=tab1]:checked ~ .slide .slide-inner { left: 0; } input[id=tab2]:checked ~ .slide .slide-inner { left: -300px; } input[id=tab3]:checked ~ .slide .slide-inner { left: -600px; } /*----------------------------------------*/ <body> <div class="tab-inner"> <input type="radio" name="tabmenu" id="tab1" checked> <input type="radio" name="tabmenu" id="tab2"> <input type="radio" name="tabmenu" id="tab3"> <div class="slide"> <div class="slide-inner"> <a href="#none1"><img src="images/slide-01.jpg"></a> <a href="#none2"><img src="images/slide-02.jpg"></a> <a href="#none3"><img src="images/slide-03.jpg"></a> </div> </div> <div class="btn"> <label for="tab1"></label> <label for="tab2"></label> <label for="tab3"></label> </div> </div> </body>

  • HTML/CSS
황서영 댓글 2 좋아요 1 조회수 149

HashCode override

미해결

김영한의 실전 자바 - 중급 2편

김영한 선생님의 자료의 경우에는 매개변수가 Object value 였는데 만약 제네릭을 K key 라고 할때에도 return Math.abs(Objects.hashCode()) 라고 하는게 맞나요 ? 아니면 Math.abs(key.hashCode()) 가 맞나요? gpt 말로는 Objects 로 해야 NullPointerException 을 방지할 수 있다고 하는데 왜 그런건가요 ?

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
ghuhan18 댓글 1 좋아요 0 조회수 209

gradle 관리 방법에대한 의견이 궁금해 문의남깁니다!

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

안녕하세요! 코프링 대신에 자프링부터 들렀습니다 ㅎㅎ 기존에 maven만 사용해봐서 신규 플젝도 maven으로 생성했는데.. gradle을 이참에 배워보려고 합니다!! gradle이 groovy랑 kotlin 2가지 언어로 나뉜 것 같은데 영상에서 그루비를 선택하신 이유가 있을까요? 혹시 기존 프로젝트도 그루비를 사용하시는거라면 이유가 궁금합니다! 많은 부분을 사용하는건 아니더라도 추후 코프링을 사용한다면 그레이들또한 코틀린으로 관리하는게 더 편하지 않을까 싶어서요!

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
김영욱 댓글 1 좋아요 1 조회수 141

Beautify에 관해서

미해결

퍼블리싱 핵심이론 PDF 교재 및 예제파일(HTML+CSS+FLEX+JQUERY)

유튜브 보면서 비주얼 스튜디오 코드 환경설정 중인데 beautify가 '이 확장은 더 이상 유지 관리되지 않으므로 더 이상 사용되지 않습니다.' 라는 알림문 뜹니다 그래도 다운 받으면 확장 앱 부분에 노란색 경고 아이콘이 계속 뜨는데 이대로 두는게 맞는건가요?

  • HTML/CSS
  • jquery
  • flex
강현경 댓글 1 좋아요 0 조회수 135

질문) 실무 재고처리 에서 비관적 vs 낙관적 lock

미해결

김영한의 실전 자바 - 고급 1편, 멀티스레드와 동시성

안녕하세요 강사님 재밌게 잘 보고 있습니다. 실무에서 주문 수 증가와 같은 단순 연산의 경우는 낙관적락 이 일반적인데, 인벤토리 ( 재고처리 ) 와 같은 도메인에서도 낙관적 락이 일반적인지가 궁금하여 문의드립니다. 재고는 동시에 여러 사용자가 접근하여 변경할 가능성이 있기 때문에, 충돌이 더 빈번하게 발생할 수 있을것 같아 왠지 강의내용으로만 보아서는 비관적 락을 사용할것 같다는 생각이 들긴하지만 ... 통상적으로 사용하는 락이 궁금하여 질문드립니다 감사합니다

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
제트브레인 댓글 1 좋아요 0 조회수 303

Shuttle에 많이 태우기 위해 코드를 수정한 후 생긴 사이드 이팩트

미해결

김영한의 실전 자바 - 중급 2편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] ``` package generic.test.ex3; import generic.test.ex3.unit.BioUnit; public class Shuttle<T extends BioUnit> { private BioUnit[] units; private int unitCount; public Shuttle() { units = new BioUnit[10]; } public void in(T unit) { units[unitCount++] = unit; } public T out() { return (T) units[0]; } public void showInfo() { for (int i = 0; i < unitCount; i++) { System.out.println("이름: " + units[i].getName() + " HP: " + units[i].getHp()); } } } package generic.test.ex3; import generic.test.ex3.unit.Marine; import generic.test.ex3.unit.Zealot; import generic.test.ex3.unit.Zergling; public class ShuttleTest { public static void main(String[] args) { Shuttle<Marine> shuttle1 = new Shuttle<>(); shuttle1.in(new Marine("마린", 40)); shuttle1.in(new Marine("마린2", 45)); shuttle1.showInfo(); Shuttle<Zergling> shuttle2 = new Shuttle<>(); shuttle2.in(new Zergling("저글링", 35)); shuttle2.in(new Zergling("저글링2", 35)); shuttle2.in(new Zergling("저글링3", 35)); shuttle2.in(new Zergling("저글링4", 35)); shuttle2.showInfo(); Shuttle<Zealot> shuttle3 = new Shuttle<>(); shuttle3.in(new Zealot("질럿", 100)); shuttle3.in(new Zealot("질럿2", 100)); shuttle3.in(new Zealot("질럿3", 100)); shuttle3.in(new Zealot("질럿4", 100)); shuttle3.showInfo(); UnitPrinter.printV1(shuttle1); UnitPrinter.printV2(shuttle1); } } Shuttle을 생성하고 내부에 많이 태우고 싶어서 코드를 조금 수정해 보았습니다 ! 그런데 코드를 이렇게 수정하니 문제풀이 시간 때 package generic.test.ex3; import generic.test.ex3.unit.BioUnit; public class UnitPrinter { public static <T extends BioUnit> void printV1(Shuttle<T> shuttle) { T out = shuttle.out(); System.out.println("이름: " + out.getName() + "HP: " + out.getHp()); } public static void printV2(Shuttle<? extends BioUnit> shuttle) { BioUnit out = shuttle.out(); System.out.println("이름: " + out.getName() + "HP: " + out.getHp()); } } 이 코드를 출력하기 위해서 Shuttle 클래스에 out메서드에 unit 1명만 출력하기 위해 (T) units[0]을 반환하였는데요, 이렇게 한 덕분에 문제 요구사항 대로 잘 나왔지만, Shuttle 클래스의 out 메서드에 이러한 린트가 발생합니다. Unchecked cast: 'generic. test. ex3.unit. BioUnit' to 'T' 왜 이러한 문제가 발생하는지 파악을 하지 못했고, 혹시 코드를 이렇게 작성하게 된다면 어떤 문제점이 발생하는지, 어떻게 리팩터링 하면 좋을지 조언을 구하고 싶습니다 !

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
강리눅스 댓글 1 좋아요 0 조회수 160

마지막에 하신 테스트 자체는 실패하는 게 맞는거죠??

미해결

실습으로 배우는 선착순 이벤트 시스템

Producer 에는 제대로 값이 찍히는데 하지만 테스트 자체는 실패했는데요 아마 mysql과 연결이 되지 않아서 생긴 오류라고 봐도 될까요?? 아직 뒷 강의는 진행하지 않았습니다!!

  • java
  • docker
  • spring-boot
  • kafka
  • redis
0515 댓글 2 좋아요 0 조회수 303

와일드 카드는 이미 만들어진 제네릭 타입을 활용할 때 사용한다 ?

미해결

김영한의 실전 자바 - 중급 2편

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요 ! 강의를 통해 제네릭에 대해 알 수 있어서 감명깊었습니다. 회사 코드를 보면서 막혔었는데 점차 이해가 되고 있어요 ! 감사 인사 먼저 전합니다 ㅎㅎ Generic2 정리 부분 11:06초에 질문 있습니다 ! 와일드카드는 제네릭 타입이나, 제네릭 메서드를 선언하는 것이 아니다. 와일드 카드는 이미 만들어진 제네릭 타입을 활용할 때 사용한다. 이 부분이 이해가 잘 되지 않습니다 ...! public static void printV2(Shuttle<? extends BioUnit> shuttle) { BioUnit out = shuttle.out(); System.out.println("이름: " + out.getName() + "HP: " + out.getHp()); } package generic.test.ex3; import generic.test.ex3.unit.BioUnit; public class UnitPrinter { public static <T extends BioUnit> void printV1(Shuttle<T> shuttle) { T out = shuttle.out(); System.out.println("이름: " + out.getName() + "HP: " + out.getHp()); } public static void printV2(Shuttle<? extends BioUnit> shuttle) { BioUnit out = shuttle.out(); System.out.println("이름: " + out.getName() + "HP: " + out.getHp()); } } 강의에서 사용한 와일드카드 메서드 예시입니다 ! printV2가 와일드카드 메서드 인데요, 이 메서드를 구현한 UnitPrinter 클래스는 제네릭 타입을 선언(?)하지 않았는데도 불구하고 사용하고 있는데, 어떤 인스턴스를 기준으로 제네릭이 "이미 만들어진 제네릭 타입"으로 간주하면 될까요? 제가 아직 깊이가 부족하여 이해를 잘 못한 것일 수 있지만, 만약 Shuttle 클래스에서 제네릭 타입을 선언하지 않고, <?>만을 사용하여 메서드를 만든다면 잘못된 사용법인지궁금합니다 ! 와일드카드는 제네릭 타입이나, 제네릭 메서드를 선언하는 것이 아니라 이미 만들어진 제네릭 타입을 활용할 때 사용한다의 예시가 더 있다면 조언 부탁드리겠습니다 ! 감사합니다 ☺

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
강리눅스 댓글 1 좋아요 0 조회수 164

동영상을 최신버전에 맞게 업그레이드 해주시거나 css적용이 안되는 원인과 해결방법을 빠르게 써주실 수 있나요?

미해결

나만의 포트폴리오 웹페이지 만들기

<!DOCTYPE html> <html lang="ko"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="Chrome"> <meta name="viewport" content="width-device-width, initial-scale-1.0, maximum-scale-1.0, minimum-scale-1.0, user-scalable-no"> <title>Portfolio - Navbar</title> <!-- saved from url=(0013)about:internet--> <!-- icon --> <script src="https://kit.fontawesome.com/64fe4437c7.js" crossorigin="anonymous"></script> <!-- fonts --> <link href="https://fonts.googleapis.com/css2?family=Heebo:wght@100..900&family=Noto+Sans+KR:wght@100..900&display=swap" rel="stylesheet"> <!-- user style --> <link rel="stylesheet" href="/css/portfolio.css"> </head> <body> <header class="header-area navbar-fade" id="header"> <nav class="Navbar"> <a class="Navbar-brand" id="navbarBrand">logo</a> <a class="Navbar-toggler" id="toggleBtn"><i class="fa fa-bars"></i></a> <div class="Navbar-menu" id="menu"> <div class="nav-item"><a class="nav-link" id="navbarAbout">about</a></div> <div class="nav-item"><a class="nav-link" id="navbarService">service</a></div> <div class="nav-item"><a class="nav-link" id="navbarPortfolio">portfolio</a></div> <div class="nav-item"><a class="nav-link" id="navbarReview">review</a></div> </div> </nav> </header> <!-- user script --> <script src="portfolio.js"></script> </body> </html> 웨에거는 portfolio.html이고 아래거는 portfolio.css인데, 아이콘 적용도 안되고, css적용도 안되요! 고쳐주세요! /* COMMON */ * { margin: 0; padding: 0; font-size: 0; } body { box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; word-break: break-all; font-family: 'Heebo', sans-serif; } img { width: 100%; height: 100%; } a { text-decoration: none; font-size: 14px; text-transform: uppercase; } ul { list-style-type: none; } /* HEADER */ .header-area { position: relative; top: 0; left: 0; width: 100%; z-index: 99; background-color: white; box-shadow: 0 1px 10px rgba(0, 0, 0, 0.3); } .navbar-fade { animation-name: navbar-fade; animation-duration: 0.5s; -webkit-animation-name: navbar-fade; -webkit-animation-duration: 0.5s; } @keyframes navbar-fade { from {opacity: .4} to {opacity: 1} } @-webkit-keyframes navbar-fade { from {opacity: .4} to {opacity: 1} } .header-area.navbar-fixed { position: fixed; } .header-area > .navbar { width: calc(100% - 120px); margin: 0 60px; overflow: hidden; } @media (min-width: 992px) { .header-area > .navbar { max-width: 900px; margin: 0 auto; } } @media (min-width: 1200px) { .header-area > .navbar { max-width: 1000px; } } .header-area > .navbar > .navbar-brand { display: inline-block; position: absolute; top: 50%; transform: translateY(-50%); font-size: 32px; cursor: pointer; } .header-area > .navbar > .navbar-toggler * { font-size: 32px; } .header-area > .navbar > .navbar-toggler { float: right; height: 70px; line-height: 70px; font-size: 32px; cursor: pointer; } @media(min-width: 992px) { .header-area > .navbar > .navbar-toggler { display: none; } } .header-area > .navbar > .navbar-menu { position: absolute; background-color: rgba(0, 0, 0, 0.5); top: 70px; left: 0; width: 100%; height: 200px; transition: 0.5s ease; overflow: hidden; } .header-area > .navbar > .navbar-menu.show { height: 200px; } .header-area > .navbar > .navbar-menu > .nav-item { float: none; display: block; height: 50px; line-height: 50px; } .header-area > .navbar > .navbar-menu > .nav-item:hover * { background-color: rgba(0, 0, 0, 0.4); } .header-area > .navbar > .navbar-menu > .nav-item > .nav-link { display: block; padding-left: 50px; color: white; cursor: pointer; } @media (min-width: 992px) { .header-area > .navbar > .navbar-menu { position: relative; background-color: transparent; float: right; top: 0; width: auto; height: auto; transition: none; } .header-area > .navbar > .navbar-menu.show { height: auto; } .header-area > .navbar > .navbar-menu > .nav-item { display: inline-block; height: 70px; line-height: 70px; } .header-area > .navbar > .navbar-menu > .nav-item:hover * { background-color: transparent; } .header-area > .navbar > .navbar-menu > .nav-item > .nav-link { display: block; padding: 0 20px; color: black; } } css파일을 css폴더에 넣고 <link rel="stylesheet" href="/css/portfolio.css">로 불러오기를 했는데 안되요!

  • HTML/CSS
  • 웹-디자인
Tkhp Sch 댓글 1 좋아요 0 조회수 126

섹션 .con02 gsap 질문

미해결

UIUX 디자이너 취업을 위한 웹 포트폴리오 제작 : 퍼스널 브랜딩 전략

안녕하세요 먼저 너무 유익하고 도움이되는 강의를 주셔서 감사드립니다. .con02에 workList gsap쪽에 질문이 있어서 글 남기게 되었습니다. my work 타이틀이 fixed되고 리스트들이 올라왔다가 다시 스크롤을 천천히 위 방향으로 해서 올라가다보면 리스트 영역이 이상하게 위로 올라왔다가 사라지는 현상이 있어서 문의 드립니다.

  • HTML/CSS
  • 포트폴리오
  • 반응형-웹
  • gsap
  • scrolltrigger
신동승 댓글 3 좋아요 0 조회수 317

2025년 실기준비할때도 참고하면 좋을 강의일까요?!

미해결

[2026년 출제기준] 웹디자인개발기능사 실기시험 완벽 가이드

아직 결제만하고 강의시청은 안한상태인데 2025년 웹디자인개발기능사로 바뀌는데 내용도 바뀐다고 알고있는데 이 강의로2025년도꺼 준비해도 무리는 없을까요!? 혹시 2025년도 버전 강의가 새로 나오면 그걸로 결제할까해서요 여쭤볼곳이 없어서 여기에 적습니다. 답변주시면 감사하겠습니다.!

  • HTML/CSS
  • jquery
  • 웹-디자인
이희정 댓글 1 좋아요 2 조회수 276

SessionManagerV6 에서 synchronized 부분이 이해가 잘 안갑니다.

해결됨

김영한의 실전 자바 - 고급 2편, I/O, 네트워크, 리플렉션

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] package network.tcp.v6; import network.tcp.v5.SessionV5; import java.util.ArrayList; import java.util.List; public class SessionManagerV6 { private List<SessionV6> sessions = new ArrayList<>(); public synchronized void add(SessionV6 session) { sessions.add(session); } public synchronized void remove(SessionV6 session) { sessions.remove(session); } public synchronized void closeAll() { for (SessionV6 session : sessions) { session.close(); } sessions.clear(); } } 여기서 closeAll() 에서 스레드가 작업중일때 다른스레드가 remove() 를 호출할 수 없다는 부분이 잘 이해가 안 갑니다. synchronized 는 메서드 단위로 적용이 된다고 알고 있어서 closeAll() 에 스레드가 작업중이더라도 remove() 같은 다른 메서드랑은 관련 없다고 생각했습니다. 뭔가 흐름을 잘못 이해하고 있는 걸까요?

  • java
  • 네트워크
  • 객체지향
물병97 댓글 1 좋아요 0 조회수 305

인기 태그

인프런 TOP Writers

주간 인기글