inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

Ex1RefMainV1 질문

해결됨

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

[질문 내용] 안녕하세요, 영상에서 영한님이 "메서드를 전달"하라고 하시기에 다음과 같이 풀어봤는데, 영한님 풀이와는 접근 방법이 조금 다른 것 같아 문의드립니다. 제가 봤을 때는 영한님 풀이의 경우 "메서드를 전달" 한다는 느낌보다는 "메서드를 구현해놓은 인스턴스를 전달" 한다는 느낌으로 받아들여져서 질문드립니다. 다음과 같이 풀이해도 익명 클래스의 목적에 부합하는 풀이일까요? 추가로 강의록에 "그런데 지금까지 학습한 내용으로는 메서드를 전달할 수 있는 방법이 없다." 라고 언급되었는데 이는 결국 "(아직 학습하지 않았지만) 메서드를 전달할 수 있는 방법이 존재한다." 라고 해석되고, 이에 해당하는 방법이 아래 풀이와 같은 방법인지 궁금합니다. // my solution-2 package nested.anonymous.ex; import nested.local.Process; import java.util.Random; public class Ex1RefMainSOL2 { public void process(Process process) { System.out.println("프로그램 시작"); process.run(); System.out.println("프로그램 종료"); } public static void main(String[] args) { Ex1RefMainSOL2 main = new Ex1RefMainSOL2(); main.process(new Process() { int randomValue = new Random().nextInt(6) + 1; @Override public void run() { System.out.println("주사위 = " + randomValue); } }); main.process(new Process() { @Override public void run() { for (int i = 1; i <= 3; i++) { System.out.println("i = " + i); } } }); } }

  • java
  • 객체지향
dev.rudevico 댓글 1 좋아요 0 조회수 136

value라는 필드가 없어도 value값이 출력되네요?

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] (자바 기본 - NullPointerException강의 입니다) 제목 그대로 NullMain3.java파일에서 System.out.println(" bigData.data .value=" + bigData.data .value);코드를 보면요. value라는 필드가 없는데 0이 출력되는 이유가 궁금합니다!

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

영한님 질문이 있습니다(자바 관련 질문 아님 - 다음 행보에 대해서)

해결됨

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 안녕하세요. 어제인가 그저께인가, 이 생각이 계속 떠나지 않아서 글을 쓰게 되었습니다. 말 그대로 영한 님의 개발 커리에 대해, 다음 행보가 궁금해져서 질문을 드립니다. 1. 자바 강의 및 DB강의를 끝나고 다음 강의로는 무엇을 하실 건가요? 아니면 다시 실무로 가실 건인지? 2. 자바 강의를 끝나고 DB를 하신다는 기억이 있는데, DB 강의 때에, 어떤 종류의 sql을 이용할 생각 인가요? 답변 부탁 드립니다.

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
생각하는자 댓글 2 좋아요 0 조회수 243

jwt decoder 토큰 검증 시 질문

미해결

스프링 시큐리티 OAuth2

마지막 강의에서 이불러 인가서버 access token을 1초만에 만료 시키는 설정을 하고 리소스 서버로 expire 엔드 포인트를 호출 하였는데 여기서 bearer 인증 필터를 거치는데 여기서 jwt 토큰을 decoder로 검증할 때 토큰이 만료되어 검증이 실패하지 않나요? 강의에서는 바로 컨트롤러 엔드 포인트까지 도달 하고 클라이언트까지 응답이 갔습니다.

  • java
  • spring
  • spring-boot
  • oauth
hoonseung 댓글 1 좋아요 0 조회수 245

낙관적 락 테스트 실패

미해결

재고시스템으로 알아보는 동시성이슈 해결방법

안녕하세요 낙관적 락을 활용해서 조회수 증가 동시성 테스트를 하고 있습니다! 영상처럼 동일하게 로직을 작성해서 테스트 하는데 동시성 처리가 전혀 안되는 상태라 질문 드립니다ㅜㅜ 아래는 Board 엔티티입니다! import jakarta.persistence.*; import lombok.Getter; @Getter @Table(name = "board") @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @Column(name = "view") private long view; @Version private Long version = 0L; public Board(String title, long view) { this.title = title; this.view = view; } public void increaseView() { this.view += 1; } public Board() { } } 서비스 로직입니다! Catch 부분을 전혀 타지 않는 상태인거 같습니다 @Transactional public void increaseViewCountOpticLock(final long boardId) throws InterruptedException { while (true) { try { Board board = boardRepository.findByIdWithOptimistLock(boardId); board.increaseView(); // 조회수 증가 boardRepository.save(board); // 저장 break; // 성공 시 루프 탈출 } catch (ObjectOptimisticLockingFailureException e) { log.info("========================="); Thread.sleep(50); } } } import jakarta.persistence.LockModeType; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Lock; import org.springframework.data.jpa.repository.Query; import org.tkdgus.concurrdemo.entity.Board; public interface BoardRepository extends JpaRepository<Board, Long> { default Board getBoardById(long boardId) { return findById(boardId).orElseThrow(IllegalArgumentException::new); } @Lock(LockModeType.OPTIMISTIC) @Query("SELECT b FROM Board b WHERE b.id = :boardId") Board findByIdWithOptimistLock(long boardId); } DB는 MySQL이고 트랜잭션 격리 수준이나 이런건 다 기본 설정 그대로입니다! @Test @DisplayName("낙관적 락 동시성 테스트") void increaseViewCountOptimisticLock() throws InterruptedException { long boardId = 1L; int concurCnt = 100; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(concurCnt); for (int i = 0; i < concurCnt; i++) { executorService.submit(() -> { try { boardService.increaseViewCountOpticLock(1L); } catch (InterruptedException e) { throw new RuntimeException(e); } finally { latch.countDown(); } }); } latch.await(); BoardDto afterBoard = boardService.findBoard(boardId); assertThat(afterBoard.view()).isEqualTo(concurCnt); } 위 테스트 코드로 테스트 하면 100이 아니라 항상 10으로 나오는데 원인을 도저히 모르겠습니다ㅜㅜ

  • java
  • spring
  • 동시성
냥덕 댓글 2 좋아요 0 조회수 273

클라이언트에서 userinfo 엔드포인트 호출 시 질문

해결됨

스프링 시큐리티 OAuth2

안녕하세요 강의 초반에 oauth2Login api를 사용하여 클라이언트에서 token 요청 후 scope email, profile 이렇게 userinfo 엔드포인트 요청 시 인가 서버에서 해당 요청을 받아서 리소스 서버에게 토큰 검증을 맡기고 검증을 성공하게 되면 리소스 서버에 저장된 사용자 정보를 바로 클라이언트에게 전송하나요? 아니면 다시 인가서버로 전송하나요? 만약 scope에 openid가 포함이 안되어 있다면 인가 서버에서 토큰 검증을 수행 후 사용자 정보를 안주는 거 같은데 우리가 보통 사용하는 google, 카카오 네이버 이런 거는 포함 안 시켜도 줬는데.. 또 강의 초반에는 키클록을 사용했는데 이건 키클록 구현과는 좀 틀린가요?

  • java
  • spring
  • spring-boot
  • oauth
hoonseung 댓글 2 좋아요 0 조회수 207

build.gradle 설정 문제 : querydsl,java21,lombok,mapstruct

미해결

실전! Querydsl

해당 스펙의 gradle설정 해보신분 이 계신다면 답변달아주시면 너무 감사하겠습니다ㅠㅠㅠ 가상스레드를 사용할예정이라 java 21, querydsl,lombok을 포함하여 개발을 시작했습니다 (이후 mapstruct를 추가함) 처음설정은 어찌저찌 일일이 지정해가면서 빌드할때 compileQuerydls 태스크만 돌린다던지 querydsl관련 설정을 덕지덕지 붙여서 어떻게 생성시키고 돌아가게는 만들었던것 같습니다. 하지만 기존 설정이 mapstruct를 붙이게 되면서 문제가 생겼고 (anotationprocessor문제로 추정) java21에서는 querydsl의 directory path 설정이라던지 기타 설정없이도 qclass가 생긴다하여 build.gradle 파일을 수정하며 삽질중인데 잘 해결되지 않아 질문글을 남기게 되었습니다. 제가 생각하기로는 lombok과querydsl,mapstruct의 anotationprocessor가 호환이 안되던지 분리해주어야 하거나 추가 설정이 필요해서 되지 않는 것인가 추측해보았습니다. 일단 기존 querydsl, lombok만 설정했던 소스와 현재 수정중인 소스를 첨부합니다 [기존파일] querydsl,lombok 설정 plugins { id 'java' id 'org.springframework.boot' version '3.3.5' id 'io.spring.dependency-management' version '1.1.6' id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' } apply plugin: 'com.ewerk.gradle.plugins.querydsl' group = 'kr.co.aaa' version = '0.0.1-SNAPSHOT' java { toolchain { languageVersion = JavaLanguageVersion.of(21) } } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { // Validation 관련 추가 의존성 implementation 'jakarta.validation:jakarta.validation-api:3.0.2' implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-quartz' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'org.postgresql:postgresql' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' // QueryDSL 추가 implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' // QueryDSL JPA 의존성 implementation 'com.querydsl:querydsl-core' implementation 'com.querydsl:querydsl-collections' annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' // QueryDSL의 JPAAnnotationProcessor annotationProcessor 'jakarta.annotation:jakarta.annotation-api' // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드 annotationProcessor 'jakarta.persistence:jakarta.persistence-api' // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드 //netty implementation 'io.netty:netty-all:4.1.97.Final' // Netty 전체 라이브러리 } // Querydsl 설정부 def generated = file('src/main/generated') // src/main/generated 경로 지정 querydsl { library = 'com.querydsl:querydsl-apt' jpa = true querydslSourcesDir = generated } sourceSets { main { java { srcDirs += "src/main/generated" // generated 폴더를 소스 경로에 추가 } } } tasks.withType(JavaCompile).configureEach { options.annotationProcessorPath = configurations.annotationProcessor options.generatedSourceOutputDirectory.set(generated) // Q 클래스가 src/main/generated에 생성되도록 설정 } // compileQuerydsl 태스크가 이미 존재하는지 확인하고, 없을 경우에만 등록 if (!tasks.names.contains("compileQuerydsl")) { tasks.register("compileQuerydsl", JavaCompile) { source = sourceSets.main.java.srcDirs classpath = sourceSets.main.compileClasspath // Main classpath 설정 options.annotationProcessorPath = configurations.annotationProcessor destinationDirectory.set(generated) // 생성 경로 설정 } } compileQuerydsl { options.annotationProcessorPath = configurations.querydsl } configurations { querydsl.extendsFrom compileClasspath } // gradle clean 시에 QClass 디렉토리 삭제 clean { delete file("src/main/generated") } tasks.named('test') { useJUnitPlatform() } [수정중인 파일] querydsl,lombok,mapstruct이 되도록 빌드하고자 했었음 plugins { id 'java' id 'org.springframework.boot' version '3.3.5' id 'io.spring.dependency-management' version '1.1.6' } group = 'kr.co.artlab' version = '0.0.1-SNAPSHOT' sourceCompatibility = '21' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-quartz' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' implementation 'jakarta.validation:jakarta.validation-api:3.0.2' implementation 'org.hibernate.validator:hibernate-validator:8.0.1.Final' implementation 'org.mapstruct:mapstruct:1.5.5.Final' implementation 'io.netty:netty-all:4.1.97.Final' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta' annotationProcessor 'jakarta.annotation:jakarta.annotation-api' annotationProcessor 'jakarta.persistence:jakarta.persistence-api' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final' runtimeOnly 'org.postgresql:postgresql' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' // Querydsl implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' } tasks.named('test') { useJUnitPlatform() } clean { delete file('src/main/generated') }

  • java
  • jpa
  • querydsl
  • mapstruct
송아름 댓글 2 좋아요 0 조회수 419

또 다른 풀이 공유합니다.

해결됨

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

질문은 아니고, 수강하시는 분들에게 도움이 되고자 제가 풀이한 또 다른 방식 공유합니다. package time.test; import java.util.Scanner; import java.time.LocalDate; import java.time.DayOfWeek; public class TestCalendarPrinter { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("년도를 입력하세요: "); int year = sc.nextInt(); sc.nextLine(); System.out.print("월을 입력하세요: "); int month = sc.nextInt(); sc.nextLine(); printCalendar(year, month); } private static void printCalendar(int year, int month) { // 사용자 입력에 따른 LocalDate 객체 생성 LocalDate ld = LocalDate.of(year, month, 1); // 요일 표지 출력 System.out.println("Su Mo Tu We Th Fr Sa"); for (int i = 0; i < ld.lengthOfMonth(); i++) { // 해당 월의 1일에 해당하는 요일을 감지하고, 이에 따라 출력 시작 위치를 지정 // ld.getDayOfWeek().getValue()는 해당 날짜의 요일 값을 int로 리턴 Sunday(0), Monday(1) if (i == 0) { for (int j = 0; j < ld.getDayOfWeek().getValue(); j++) { System.out.print(" "); } } // 다음 일을 출력. startPosition은 위에서 맞췄으므로 단순 포맷팅 출력만 하면 됨 LocalDate currentLd = ld.plusDays(i); System.out.printf("%2d ", currentLd.getDayOfMonth()); // Saturday 출력 후에는 다음 줄로 이동 if (currentLd.getDayOfWeek() == DayOfWeek.SATURDAY) { System.out.println(); } } } }

  • java
  • 객체지향
dev.rudevico 댓글 1 좋아요 1 조회수 175

api/v1/members 404 에러 질문입니다.

해결됨

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

[질문 내용] 왜 404 에러가 뜨는지 모르겠네요 ㅠㅠ 도움 요청합니다.

  • java
  • spring
  • spring-boot
  • jpa
han909079 댓글 5 좋아요 0 조회수 274

모니터에 한 줄로 출력

미해결

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

C에서는 모니터의 값을 출력할 때 printf("a = %d, b = %d",a,b) 이런식으로 적어서 한줄로 표현 할 문장을 연달아 쓸수 있는데 JAVA에서는 중간에 변수를 출력하고 싶으면 무조건 끊어야하나요?

  • java
  • 객체지향
형호 임 댓글 1 좋아요 0 조회수 82

Test의 application.yml을 지웠을 때

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

[질문 내용] OrderServiceTest에서 테스트 메서드를 실행하면서 H2 DB에 쿼리가 들어가는지 확인하기 위해 Test 폴더 안에 resources를 지우고 상품주문 테스트 메서드 안에 RollBack(value = false), em.flush()를 통해서 실제 데이터가 들어가는것을 확인하였습니다. 그런데 다시 원래대로 돌리는 과정에서 Test폴더 안에 resource를 만들고 해당 테스트의 application.yml를 돌려났음에도 불구하고 실행했음에도 H2 DB 안에 데이터는 그대로 남더라고요. 그래서 RollBack(value = false), em.flush()를 지우고 다시 실행해도 계속 데이터가 남는데 어떻게 해결하면 좋을까요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
soojinkimss 댓글 2 좋아요 1 조회수 112

상속과 오지랖의 콜라보 예제에서 clone() 메서드에 대한 문의드립니다.

해결됨

기초 탄탄! 독하게 시작하는 Java - Part 2 : OOP와 JVM

해당 예제(22:17)의 setString(String param)에서 string 필드 변수의 값을 수정하고자 아래 구문을 사용하셨는데요, string = param.getBytes().clone(); clone() 메서드를 사용하지 않아도(아래 구문) string 필드 변수의 수정이 가능한데, clone() 메서드를 사용한 이유를 알 수 있을까요? string = param.getBytes(); 해당 의문에 대해서 얇은/깊은 복사 와 관련이 있는지 확인해보기 위해 디버깅을 해본 결과, 두 변수는 값은 같으나, 다른 메모리 위치를 갖는 것으로 확인을 했습니다. -> clone() 메서드가 있는 코드/없는 코드 모두 위와 동일하게 동작하는 것을 확인했습니다. 그래서 다른 이유로 clone() 메서드를 사용하신 거 같은데, 어떤 이유인지 문의 드립니다.

  • java
  • 객체지향
  • jvm
  • data-structure
전종락 댓글 2 좋아요 1 조회수 201

테스트 fixture

미해결

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

안녕하세요 강사님. 코틀린을 배우는데 좋은강의 만들어주셔서 감사합니다. 테스트를 위한 fixture 코드 부분에 대해 의견 여쭤보고 싶습니다. 강의에선 직접 엔티티 내부에 테스트를 위한 fixture 함수를 만들어 주셨는데, 팀 내부 의사결정에 따라 두어도 괜찮을 수도 있을 것 같지만 만약 테스트용 코드는 분리해야 한다고 하면 아래처럼 테스트 코드 패키지쪽에 fixture 생성을 위한 유틸파일을 만들고, 테스트 코드에서만 Book.fixture(...) 같은 형태로 사용할 수 있도록 엔티티에 비어있는 companion object를 만든 뒤 확장함수를 작성하는 형태로 해도 괜찮을지 의견 여쭤보고 싶습니다.! 테스트코드용 유틸 생성 User, Book 등의 엔티티에 비어있는 동행객체 선언 엔티티별 Companion 확장함수 작성 테스트 코드에서 엔티티.fixture() 형태로 사용

  • java
  • spring
  • kotlin
  • spring-boot
  • 리팩토링
우럭아왜우럭 댓글 2 좋아요 1 조회수 239

c,c++로 만든 프로그램을 실행한 프로세스

해결됨

기초 탄탄! 독하게 시작하는 Java - Part 1 : 절차적 프로그래밍

안녕하세요! [Java의 특징과 JVM]강의에서 4:10초 정도에 시작하는 C,C++로 만든 어플리케이션의 특징 부분을 설명해 주시는 부분에서 질문이 있어서 글 남깁니다. (C/C++에 대해서는 깊게 공부한 적이 없습니다...) 1번 질문 C,C++로 만든 프로그램을 실행하면 '프로세스'가 생성되고 '프로세스'안에 특정 CPU가 실행 가능한 '기계어'가 포함되어있다고 하셨는데 앞선 강의에서 보여주셨던 '특정 CPU가 바로 실행할 수 있는 16진수로 된 기계어'를 말씀하시는게 맞나요? 2번 질문 자바로 만든 어플리케이션A,B,C가 각각 있고 3개 다 실행했을 때 프로세스A, 프로세스B, 프로세스C가 각각 만들어져서 실행되는걸로 알고 있습니다. User mode process JVM 내용에서 "유저모드 어플리케이션 관점에서 프로세스다"라는 말씀이 JVM도 어쨌든 하나의 프로그램을 실행시킨 프로세스여서 그런건가요? 아니면 OS의 통제를 받아서 그런건가요? 3번 질문 스레드에 관해서 다루지 않는다고 하셨지만.. PC Register의 정확한 역할이 궁금해서 질문 남깁니다! 제가 알기론 실제 CPU에는 여러가지 레지스터들이 있고 그중에 PC Register는 실행 지점(다음 명령어가 담겨있는 메모리 주소)만 들고 있는 역할로 알고 있는데 런타임 데이터 영역에 있는 PC Register도 각 스레드별 실행 지점만 가지고 있는게 맞나요? 아니면 실행지점 + 명령어도 가지고 있는건가요?

  • java
insub2004 댓글 2 좋아요 0 조회수 190

MyAtomic 성능 테스트 결과 상이

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문 전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] MyAtomicInteger 와 다른 구현체 들의 성능을 테스트 하는 코드에서 강의에 결과와 다른 결과가 나옵니다... package thread.cas.increment; import java.util.concurrent.atomic.AtomicInteger; public class MyAtomicInteger implements IncrementInteger{ AtomicInteger atomicInteger = new AtomicInteger(0); // 이미 동시성 문제가 다 해결되어 있는 클래스이다. @Override public synchronized void increment() { atomicInteger.incrementAndGet(); } @Override public int get() { return atomicInteger.get(); } } package thread.cas.increment; import static util.MyLog.log; public class IncrementPerformanceMain { public static final long COUNT = 100_000_000; public static void main(String[] args) { test(new BasicInteger()); //가장 빠르다 CPU 캐시를 가장 적극 사용한다. 멀티스레드 환경에서는 사용할 수 없다. 단일 스레드일 경우 가장 효율적 test(new VolatileInteger()); // 메인메모리를 직접 사용한다. 안전한 임계영역은 없기 때문에 멀티스레드 환경에는 사용할수 없다. test(new SyncInteger()); test(new MyAtomicInteger()); } private static void test(IncrementInteger incrementInteger) { long startMs = System.currentTimeMillis(); for (long i = 0; i < COUNT; i++) { incrementInteger.increment(); } long endMs = System.currentTimeMillis(); log(incrementInteger.getClass().getSimpleName() + ": ms=" + (endMs - startMs)); } } 아토믹이 그냥 synchronized보다 더 느린 결과가나오는데 제가 놓친 부분이 있을까요?

  • java
  • 객체지향
  • 동시성
  • multithread
  • thread
산성 댓글 3 좋아요 0 조회수 246

javac.exe나 java.exe

해결됨

기초 탄탄! 독하게 시작하는 Java - Part 1 : 절차적 프로그래밍

안녕하세요. 강사님 2025년 새해복 많이 받으세요! 반드시 알아야 할 중요한 시점 까지 강의를 시청한 상태입니다. 기초적인 질문인것 같지만... 3가지 질문 있습니다! 1번 질문 : javac.exe나 java.exe라는 것이 javac.exe : 실행시키면 .java 파일들을 .class로 번역하는 모듈 -> 컴파일러 java.exe : .class파일을 로딩 + 실행시키는 모듈 -> JVM 위의 내용처럼 이미 누군가가(JDK 개발사?) 만들어 놓은 모듈이여서 딸깍! 실행만 시켜주면 정해진 로직을 하는 프로그램(모듈)인가요? 2번 질문 : javac.exe <- 이게 컴파일러인가요? 맞다면 이것도 java나 c,c++같은 native code로 작성되어있는건가요? 3번 질문 : 종합적으로 Main.java(Hello, World!라는 문자열을 출력)를 작성한 상태라고 가정하면 Main.java를 JDK포함되어 있는 컴파일러(이미 만들어져있는 javac.exe)를 실행시켜서 컴파일하고 컴파일한 바이트코드를 JRE(JVM)에서(만들어져 있는 java.exe) 실행시키는 거라고 이해했는데 맞나요?

  • java
insub2004 댓글 1 좋아요 0 조회수 231

오디오만 나오고 화면이 안나옵니다.

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 오디오만 나오고 화면이 안나옵니다. 캐쉬도 날려보고 브라우저도 바꿔봤는데 동일하게 안나옵니다.

  • java
  • 객체지향
이정락 댓글 3 좋아요 0 조회수 207

강의 업로드 오류

미해결

개발 역량 + 자격증까지, Java로 PCCP 자격증 준비하기

2-1, 2-2 강의 업로드 된 내용이 1-1,1-2와 동일해요

  • java
  • 코딩-테스트
  • 알고리즘
  • data-structure
이도훈 댓글 1 좋아요 1 조회수 283

toString()강의부터 화면이 안보입니다.

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. toString()강의부터 소리만 나오고 검은색 화면만 보이는데 인프런측의 문제일까요..?

  • java
  • 객체지향
오수만 댓글 1 좋아요 2 조회수 174

인기 태그

인프런 TOP Writers

주간 인기글