inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개 issuer-uri에러

미해결

스프링 시큐리티 OAuth2

섹션 7 OAuth2 로그인 구현 - Oauth 2.0 User 모델 소개(2) 진행시 설정시 에러가 납니다 uli 클릭하면 realm : "oauth2", public_key : "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqFd5+xNaJoQzccdweHH4hxMOOirdHcbGx7tAkl7YWFAD0kBpVmpFN3sWaz3T3CLa0zSULmEWuepEkf/T376JKs+opBRb8pfnDSvvq1va4UXhw5j1mMgN8a6kME2TfM4cd2XnnT9huTIJ2+4nTYPTwKhYd+KvgB1ruzUe4ApMw0injfbsyufS17bhGtHYn4Ysq7THWsOAPVQ+FMYd8e1T4tfY1jkQg68UYB43dHST34y0JWkStPowP80qLMbsPvJ4JrOCzSGk08sBvmd6Fo1KD9RAqZyGvQFXEyo1Y5jVcKGCgwin0ijQBCKhRpHmWGlmyamrW6fsgAnAJH+clUdAwQIDAQAB", token-service : " http://localhost:8080/realms/oauth2/protocol/openid-connect ", account-service : " http://localhost:8080/realms/oauth2/account ", tokens-not-before : 0 } 이렇게 잘나옵니다. implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' spring: application: name: inf_oauth2 security: oauth2: client: registration: keycloak: authorization-grant-type: authorization_code client-id: oauth2-client-app client-name: oauth2-client-app client-secret: 90GVrQtfYCp1u9cc0VAJNFiY8ZzCyjHD redirect-uri: http://localhost:8081/login/oauth2/code/keycloak client-authentication-method: client_secret_basic scope: openid, profile, email provider: keycloak: issuer-uri: http://localhost:8080/realms/oauth2 authorization-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/auth jwk-set-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/certs token-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/token user-info-uri: http://localhost:8080/realms/oauth2/protocol/openid-connect/userinfo user-name-attribute: preferred_username org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'indexContoller': Unsatisfied dependency expressed through field 'clientRegistrationRepository': Error creating bean with name 'clientRegistrationRepository' defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2ClientRegistrationRepositoryConfiguration.class]: Failed to instantiate [org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository]: Factory method 'clientRegistrationRepository' threw exception with message: Unable to resolve Configuration with the provided Issuer of "http://localhost:8080/realms/oauth2" at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessorAutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:787) ~[spring-beans-6.1.6.jar:6.1.6] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessorAutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:767) ~[spring-beans-6.1.6.jar:6.1.6] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'clientRegistrationRepository' defined in class path resource [org/springframework/boot/autoconfigure/security/oauth2/client/servlet/OAuth2ClientRegistrationRepositoryConfiguration.class]: Failed to instantiate [org.springframework.security.oauth2.client.registration.InMemoryClientRegistrationRepository]: Factory method 'clientRegistrationRepository' threw exception with message: Unable to resolve Configuration with the provided Issuer of "http://localhost:8080/realms/oauth2" at java.base/java.util.HashMap.forEach(HashMap.java:1421) ~[na:na] at org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientPropertiesMapper.asClientRegistrations(OAuth2ClientPropertiesMapper.java:64) ~[spring-boot-autoconfigure-3.2.5.jar:3.2.5] at org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientRegistrationRepositoryConfiguration.clientRegistrationRepository(OAuth2ClientRegistrationRepositoryConfiguration.java:49) ~[spring-boot-autoconfigure-3.2.5.jar:3.2.5] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:140) ~[spring-beans-6.1.6.jar:6.1.6] ... 34 common frames omitted

  • java
  • spring
  • spring-boot
  • oauth
kim미소 파파 댓글 3 좋아요 0 조회수 840

양방향 연관관계의 필요성, 단방향 연관관계 시 fetch join

해결됨

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

[질문 내용] 우선 단방향 연관관계를 적용하고 꼭 필요한 경우에 양방향 연관관계를 사용하라는 내용을 적용해보다가 이해가 안되는 부분이 생겨서 질문남깁니다. Team과 Member로 양방향 연관관계를 적용한다고 생각해보면 다른 질문의 답변을 봤을 때 Team을 조회할 때 Member가 거의 같이 조회가 되는 경우와 fetch join으로 조회 시 양방향 연관관계를 사용하여 더 편리하게 조회할 때 사용한다는 답변을 봤습니다. (제대로 이해한 것인지는 모르겠습니다.) 그래서 테스트를 해봤습니다. @Test void 멤버목록과_함께_팀조회() { Team team = new Team("teamA"); entityManager.persist(team); Member member = new Member("m1", 0, team); Member member2 = new Member("m2", 0, team); entityManager.persist(member); entityManager.persist(member2); entityManager.flush(); entityManager.clear(); System.out.println("====테스트 1 양방향 연관관계==="); Team findTeam = teamJpaRepository.findById(team.getId()).get(); List<Member> members = findTeam.getMembers(); for (Member member1 : members) { System.out.println("member1 = " + member1.getUsername()); } entityManager.flush(); entityManager.clear(); System.out.println("===테스트 2 fetch join 양방향 연관관계 사용=="); Team findTeam2 = teamRepository.findTeamWithMembersById(team.getId()).get(); List<Member> members2 = findTeam2.getMembers(); for (Member member1 : members2) { System.out.println("member1 = " + member1.getUsername()); } entityManager.flush(); entityManager.clear(); System.out.println("===테스트 3 fetch join 그냥 엔티티 사용=="); Team findTeam3 = teamRepository.findTeamWithMemberById(team.getId()).get(); List<Member> members3 = findTeam3.getMembers(); for (Member member1 : members3) { System.out.println("member1 = " + member1.getUsername()); } } public interface TeamRepository extends JpaRepository<Team, Long> { @Query("select t from Team t join fetch t.members") Optional<Team> findTeamWithMembersById(Long id); @Query("select t from Team t join fetch Member m") Optional<Team> findTeamWithMemberById(Long id); } 테스트 1의 경우 두개의 쿼리가 나가는 것을 확인했습니다. select t1_ 0.team _id, t1_0.create_by, t1_0.created_date, t1_0.last_modified_by, t1_0.last_modified_date, t1_ 0.name from team t1_0 where t1_ 0.team _id=? select m1_ 0.team _id, m1_0.member_id, m1_0.age, m1_0.create_by, m1_0.created_date, m1_0.last_modified_by, m1_0.last_modified_date, m1_0.username from member m1_0 where m1_ 0.team _id=? 테스트 2의 경우 한개의 쿼리만 나가는 것을 확인했습니다. select t1_ 0.team _id, t1_0.create_by, t1_0.created_date, t1_0.last_modified_by, t1_0.last_modified_date, m1_ 0.team _id, m1_0.member_id, m1_0.age, m1_0.create_by, m1_0.created_date, m1_0.last_modified_by, m1_0.last_modified_date, m1_0.username, t1_ 0.name from team t1_0 join member m1_0 on t1_ 0.team _id=m1_ 0.team _id 테스트 3의 경우 오류가 났습니다. 위의 테스트 1(getMembers로 접근), 테스트2(fetch join)의 경우 쿼리의 개수로 봤을 때 테스트 2를 사용하는 게 더 좋은 것 같은데 맞을까요? 테스트 3은 단방향인 경우 팀과 멤버를 같이 조회를 어떻게 해야되나요? 양방향 연관관계가 필요한 경우가 뭔가요? 원래 api 설계할 때 team, member를 각각 조회하는 경우만 만들었었는데, team과 member가 같이 조회되는 api를 만드는 경우도 있나요? (team/{id}, member/{id} 와 같은 경우만 만들어봤습니다.)

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
pink102557 댓글 1 좋아요 0 조회수 345

로또 메서드 문의

미해결

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

안녕하세요. 궁금한 점이 있어 문의 드립니다. 아래의 isUnique 메서드가 실행되었을 때를 가정해서 질문해보면 isUnique 매서드가 호출이 될 때 스택에 새롭게 할당이 되고 코드가 실행이 될텐데 이 때 이 새롭게 생성된 스택 영역 안에서 매개변수로 받은 number의 값 말고 나머지 바디에 있는 count 변수나 lottoNumbers 배열을 아는 건 메서드 영역의 클래스 영역에서 클래스 네임별로 구별이 되어 있고 그 클래스의 메서드를 가져다 쓰는 거니 메서드 내부의 변수들도 그 클래스에 해당한다는 걸 스택영역에서 알 수가 있는 거죠 ? 생각해보니 메서드 영역과 스택 영역은 분리되어 있고 메서드가 호출될 때 새롭게 스택 영역이 할당이 될텐데 어떻게 새롭게 할당된 공간 안에서 메서드 내부의 값들을 다 알까 싶어서요. 감사합니다.

  • java
  • 객체지향
인프린 댓글 2 좋아요 0 조회수 305

LinkedList를 사용해서 풀어도 되나요?

미해결

자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. package sorting; import java.util.LinkedList; import java.util.Scanner; public class LRUMain { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int s = scanner.nextInt(); int n = scanner.nextInt(); LinkedList<Integer> cache = new LinkedList<>(); int[] tasks = new int[n]; for (int i = 0; i < n; i++) { tasks[i] = scanner.nextInt(); } for (int task : tasks) { if (cache.contains(task)) { cache.remove(cache.indexOf(task)); } cache.addFirst(task); if (cache.size() > s) { while (cache.size() > s) { cache.removeLast(); } } } for (int element : cache) { System.out.print(element+" "); } } } 위 방식으로 접근해도 되나요?

  • java
  • 코딩-테스트
예비군갈나이 댓글 1 좋아요 0 조회수 285

문제 풀이 질문 있습니다

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오)네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네 [질문 내용] 여기에 질문 내용을 남겨주세요. 두번째 문제에 짝수를 출력하는 프로그램에서 강사님과 제 코드가 다른데 출력값은 같은데 저 처럼 풀어도 문제가 없는건가요? public static void main(String[] args) { // 처음 10개의 짝수를 출력하는 프로그램을 만들어보자. num변수 사용. int num = 2; while (num <= 20) { if (num % 2 == 0) System.out.println(num); num++; } } public static void main(String[] args) { for(int num = 2; num <= 20; num++){ if(num % 2 == 0){ System.out.println(num); } } }

  • java
  • 객체지향
재훈 댓글 2 좋아요 0 조회수 267

메서드 시그니쳐 관련 질문

미해결

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

안녕하세요. 메서드 관련 질문입니다. 컴파일이 될 때 메서드 영역 > 클래스 영역 이 부분에 클래스의 관련 코드들이 다 들어가 있는 걸로 이해했는데 그러면 다음의 두 경우는 어떻게 이해하면 될까요 ? (두 경우 다 추상 클래스, 인터페이스에는 메서드의 바디가 작성되어 있지 않고 나중에 작성되는 경우) -> 메서드 영역의 클래스 영역에 처음에는 바디가 없으니 관련 정보가 전혀 없을 거 같은데 이와 같이 나중에 오버라이딩을 해주었을 때 메서드 영역의 클래스 영역에서 어떻게 되는지 궁금합니다. 새로운 클래스 영역에 메서드로 정의되는 부분이 아니라 기존에 클래스 영역에서 정의가 되어야 하는데 문제는 클래스 영역의 기존 메서드를 수정하자니 다음의 두 케이스는 해당 객체를 생성할 때에만 적용되는 일회성 코드라 ... 2.1 AbstractAnimal은 추상클래스로 sound()가 추상 메서드입니다. AbstractAnimal animal = new AbstractAnimal() { @Override public void sound() { System.out.println("test"); } }; 2.2 InterfaceAnimal interface 입니다. InterfaceAnimal interfaceAnimal = new InterfaceAnimal() { @Override public void sound() { System.out.println("test"); } @Override public void move() { System.out.println("test"); } }; 추상 메서드의 경우 메서드 시그니처만 메모리에 로드되었다 실행시점에 구체화 시킨 클래스에서 구현된 메서드가 메모리에 로드된다고 하셨는데 위의 예제를 보면 상속받아 메서드를 오버라이딩 한 것이 아니라 기존에 메서드 시그니처만 존재하는 클래스에서 일시적으로 구현한 방식입니다. 이럴 때에는 메모리 영역의 클래스 영역에서 어떤 로직이 수행되나요 ? (위의 예제처럼 실행될 때 익명객체 처럼 구현하여 객체 생성할 때)

  • java
  • 객체지향
인프린 댓글 1 좋아요 0 조회수 205

jpa 활용 1편 코드 이어서 하는거죠?

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] jpa 활용 1편에서 라이브 코딩했던 것들을 이어서 하는거 맞죠? 따로 jpa 활용 1편까지 구현한 코드만 올려놓은 소스 파일이 없어서 jpa 활용 1편에서 듣고 코딩했던 것들 이어서 해도되는거 맞는 거죠?

  • java
  • spring
  • spring-boot
  • jpa
lgh8079 댓글 1 좋아요 0 조회수 315

application.yml, properties 설정 문서

미해결

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

application.yml이나 properties에 적는 설정 정보? 들을 어디서 찾아볼 수 있을까요... 공식 문서를 찾아보는데 확인이 잘 안 됩니다. logging.level.org.hibernate.SQL = debug 특히 이 부분같은 경우 어디있는지 모르겠어요

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
정민교 댓글 1 좋아요 0 조회수 229

래퍼 클래스 질문

미해결

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

안녕하세요. 래퍼클래스 강의 중 궁금한게 있어서 문의드립니다. 래퍼 클래스 기본형 한계 얘기하시면서 값이 있으면 MyInteger객체를 반환해주고 없으면 null을 반환한다고 하셨는데, MyInteger는 toString을 재정의 해서 해당 클래스의 value를 String으로 출력하도록 되어 있어서 value가 나오는건 알겠는데 밑의 예시처럼 값이 없을 때에는 null 이 나오는데 이게 System.out.println(null)과 같은 뜻일텐데 따로 이런식으로 입력해보면 null이라고 안 찍히고 에러가 나더라고요. println 메서드 까서 봐도 밑과 같이 되어 있는데 String.valueOf(null)은 에러가 나고요. 설명 부탁드립니다. System.out.println(findValue(arrInt, 100)); public void println(Object x) { String s = String.valueOf(x);

  • java
  • 객체지향
인프린 댓글 2 좋아요 0 조회수 284

3:24에 무슨 단축키 쓰신 지 알 수 있을까요?

해결됨

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

3:24에 break; 에서 Enter 치면 break 이랑 같은 indent에 작성이 되는 데, 강사님께서는 순식간에 그 전 indent로 가시는 데 초록색 화면을 봐도 어떻게 하신 지 잘 모르겠어요 ㅠㅠ

  • java
  • 객체지향
Gunyoung Moon 댓글 1 좋아요 1 조회수 305

타입 매개변수 제한 강의 질문

해결됨

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. //문제 2: 개 타입 반환 //dogHospital.setAnimal(dog); Dog bigger = dogHospital.bigger(new Dog("멍멍이2", 400)); System.out.println(bigger); 문제점 2번에서 dogHospital.setAnimal(dog); 선언을 새로 한 이유가 있나요 ? 주석처리하고 컴파일해도 정상적으로 작동해서 여쭤봅니다.

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

내부 클래스 질문입니다.

해결됨

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

안녕하세요. 내부 클래스 관련하여 물어 볼게 있습니다. 외부 클래스 내의 내부 클래스가 있을 때 외부 클래스의 인스턴스만 생성할 때 메모리 구조가 궁금합니다. (외부 클래스만 생성하면 힙 메모리에는 외부 클래스만 생성 되는지, 내부 클래스는 클래스 정보가 있는 메소드 영역에 있는지, 내부 클래스가 생성 되어야만 힙 메모리에 생성 되는지) 외부 클래스를 생성 후 참조 변수를 통해 내부 클래스를 생성하는데 내부 클래스의 인스턴스가 필요 없게 될 경우 힙 메모리에 있는 외부 클래스와 내부 클래스가 동시에 가비지 컬렉션이 삭제하는지 궁금합니다. 감사합니다.

  • java
  • 객체지향
oniic 댓글 2 좋아요 0 조회수 192

다른 타입의 데이터 나머지 연산 질문

해결됨

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 해시 인덱스를 ([데이터 값] % [배열 크기])로 지정하는 원리라는 것을 알게 되었습니다. 데이터 값이 Integer라서 나머지 연산이 가능했는데, 데이터가 다른 타입이면 나머지 연산을 어떻게 하나요?

  • java
  • 객체지향
  • 코딩-테스트
  • 알고리즘
  • 해시인덱스
kyk 댓글 1 좋아요 0 조회수 292

클래스 작성 시 줄바꿈 질문

해결됨

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

강의에서 클래스를 작성하실 때, public class Marine extends BioUnit { // 줄바꿈 public Marine(String name, int hp) { super(name, hp); } } 다음과 같이 한 줄 띄고 작성을 하시는데 그 이유가 있나요? 어떤 특별한 컨벤션 같은게 존재하는건지 아니면 편의상 이렇게 작성하시는건지 해당 줄바꿈의 의도가 궁금합니다.

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

advancedTimeBy와 thenAwait 사용 예시가 궁금합니다

미해결

Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부

안녕하세요, advancedTimeBy와 thenAwait 사용 예시를 모르겠어서 문의드립니다. 강의 중 advancedTimeBy는 '특정 시간을 당겨서 앞서 나가는 것'이라 설명해주셨고, thenAwait은 해당 시간이 빠르게 다가오는 걸로 이해하면 된다고 설명해주셨습니다. 궁금한 점은 1) 각각의 테스트가 필요한 예시를 조금만 더 자세히 들어주실 수 있으실까요? 특정 프로젝트에서 어떤 상황일 때 해당 방법이 필요한지 감이 잡히지 않습니다. 1-2) 어떤 상황에 필요한 것인지 모르다보니, advancedTimeBy와 thenAwait의 쓰임이 분명히 구분돼 있을텐데도 유사한 방식이 아닌가? 라는 생각이 듭니다. 이 부분도 예시로 설명해주실 수 있다면 함께 설명해주시면 감사하겠습니다.

  • java
  • spring
  • project-reactor
  • webflux
harper.2 댓글 1 좋아요 0 조회수 230

제네릭 DTO 질문

미해결

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] static class Result<T> { private T data; } 위와 같은 Result를 static으로 선언해서 inner class로 여기서는 사용을 하였는데요, 이를 패키지 바깥에 전역적으로 사용할 수 있도록 하나의 클래스로 선언하는 것과 inner class로 사용할 때 어떤 차이가 있을지 궁금합니다. 가령, 어떤 Response에서는 count라는 필드가 필요하고, 어떤 Response에서는 message라는 필드가 필요하다고 하면, 전역적으로 Result라는 DTO를 하나의 public 클래스로 만들어둔다면 위 상황을 처리하기 힘들 것 같은데 어떠한 방식이 객체지향적인 방식일까요?

  • java
  • spring
  • spring-boot
  • jpa
스물다섯컷의흑백필름 댓글 2 좋아요 0 조회수 342

volatile 사용 이유에 대해서 여쭤보고 싶습니다!

미해결

코딩으로 학습하는 GoF의 디자인 패턴

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. synchronized 메서드 블록에서 사용되는 모든 공유변수는 동시성처리를 위해서 공유 변수에 volatile 키워드가 없어도 가시성이 확보되는 것으로 배웠는데 혹시 제가 잘못 알고있는건지 궁금해서 질문드립니다!

  • java
  • 디자인-패턴
열심히 공부하겠습니다! 댓글 3 좋아요 0 조회수 686

String 질문

미해결

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

안녕하세요. String을 구현한 클래스 설명해주신 부분에서 이해가 안가는 게 있어서 문의드립니다. StringBuilder와의 차이점에서 StringBuilder가 가변적일 수 있는 이유로 아래 필드가 final인지(String) 아닌지(StringBuilder)로 설명해주셨는데요. final byte[] value라면 value 변수는 참조변수 일꺼고 그렇기에 참조값만 변경이 되지 않으면 참조하고 있는 객체의 내부 상태들은 변경이 가능할텐데 예를 들어 String a = newString("abc"); 여기에서 c를 d로 바꾼다 한들 value가 참조하는 내용이 아닌 참조값도 바뀌어야 하는 이유가 궁금합니다. StringBuilder의 경우에는 final 선언이 안 되어 있으니 value 필드의 참조값이 바뀌던 안바뀌던 상관 없을텐데 String 같은 경우에는 final이긴 하지만 value가 참조하는 내용을 바꿨다고 해서 참조값이 무조건 바뀌게 되는 이유가 궁금합니다. private final byte[] value;

  • java
  • 객체지향
인프린 댓글 2 좋아요 0 조회수 291

AuthGrade 문제2 - 인증 등급 열거형 조회

미해결

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

========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 문제2에서 AuthGradeMain1 클래스를 만들어서 코드를 작성하는 과정에서 for문 안에서 바로 출력을 하는 코드를 작성하셨는데, EnumRefMain3_4에서 public static void main(String[] args) { int price = 10000; Grade[] grades = Grade.values(); for (Grade grade : grades) { printDiscount(grade, price); } } private static void printDiscount(Grade grade, int price) { System.out.println(grade.name() + " 등급의 할인 금액 : " + grade.discount(price)); } 따로 print 메서드를 뽑아서 리팩토링 하셔서 제가 스스로 AuthGradeMain1 풀이할 때에도 public static void main(String[] args) { AuthGrade[] grades = AuthGrade.values(); for (AuthGrade grade : grades) { printAuthGrade(grade); } } private static void printAuthGrade(AuthGrade authGrade) { System.out.println("grade = " + authGrade + ", level = " + authGrade.getLevel() + ", 설명 = " + authGrade.getDescription()); } 이런 식으로 메서드를 뽑아서 풀었습니다. 결과는 결국 똑같이 나오겠지만 메서드를 뽑아서 print하는 코드와 for문에서 직접 print하는 코드 둘 중 어느 걸 사용하는 것이 좋은 건지 어떻게 알 수 있는 걸까요?

  • java
  • 객체지향
박재성 댓글 1 좋아요 0 조회수 295

인기 태그

인프런 TOP Writers

주간 인기글