반응형

Java 17

[Java] jwt 라이브러리에서 Date를 쓰는 이유

며칠을 찾다가 chatGPT에게 물어봤다. 가끔 틀린 답변을 내놓기도 해서 어디서 그런 정보를 찾았는지도 물어보았다. 우선, 결론은 JWT 라이브러리가 Unix epoch 이후의 초 수를 나타내기 때문이다. LocalDateTime 클래스는 특정 시간대나 달력을 참조하지 않고 날짜와 시간을 나타내는데 Date 클래스는 특정시간대의 날짜,시간을 잘 주기때문이란다. chatGPT는 RFC 7519를 참고하였다고 했다.

Java 2023.01.14

[Java] String 형변환 방법 비교 (String) vs String.valueOf() vs toString()

Casting - (String) null일 경우: 문자열 "null" 반환 기본형 타입인 경우: 컴파일에러 (대신 빈 문자열을 더하면 됨, String str = 10 + ""; String이 아닌 참조형인 경우: ClassCastException 예외 발생 toString() null일 경우: NullPointerException 예외 발생 기본형 타입인 경우: toString()은 메서드이므로 기본형 타입은 사용할 수 없음, 컴파일에러(Cannot resolve method 'toString()') String이 아닌 참조형인 경우: 잘 작동 String.valueOf() - 다 잘 작동 null일 경우: 문자열 "null" 반환 기본형 타입인 경우: 잘 작동 String이 아닌 참조..

Java 2022.05.26

[Java] cannot access the classes in the package

me.study.MemberService를 구현한 me.study.MemberServiceImpl에서 이러한 문제가 발생했습니다. 빌드 하는 것은 문제가 없었지만 Problems에 뜨는 것도 보기 좋지 않았고 무엇보다 code completion(content assist)가 먹통된 것이 제일 불편했습니다. 먼저 클래스 패스 설정, 클래스의 접근 제어자 확인, 클래스 스펠링 확인을 합니다. IDE 자동완성 기능을 통해 인터페이스를 구현한 것이라서 딱히 도움은 되지 않았습니다. 해당 디렉토리에 있는 클래스 파일을 모두 삭제하니까 됐습니다. out폴더를 통째로 날려도 괜찮을 것 같습니다. 원인은 컴파일 하는 소스 파일과 동일한 디렉토리에 클래스 파일이 있기 때문이라고 합니다. 스택오버플로우의 도움을 받았습니다.

Java 2021.03.17

[JAVA] JVM

JVM(Java Virtual Machine) JVM이란? Java의 가장 큰 특징 중 하나는 OS(Operating system)에 독립적이라는 것 입니다. 먼저, 개발자가 .java파일을 생성합니다. 이를 Java Compiler의 javac라는 명령어를 이용해 컴파일하여 .class파일을 생성합니다. .class파일은 Bytecode로 되어있는데 이는 아직 컴퓨터가 읽을 수 없습니다. JVM은 Bytecode를 OS가 이해할 수 있도록 해석해줍니다. JVM이 Bytecode를 해석하는 단계가 추가되어 속도가 느렸지만 JIT(Just In Time) 컴파일러를 통해 이러한 점을 극복했습니다. JVM의 구성요소 JVM의 구성요소는 크게 Class Loader, Runtime Data Area, Excu..

Java 2021.02.07

[JAVA] 반복문에서 String 변수의 선언 위치

반복문 내에 String 변수 선언하는 것은 성능에 나쁜 영향을 끼친다라는 얘기를 어디선가 들은 적이 있습니다. 아마 반복문 내부에 변수를 선언하면 매 번 변수를 초기화하지 않을까 라는 생각에 이런 얘기를 하는 것 같습니다. 사실 뭐 큰 상관은 없지만 단순히 궁금해서 찾아보았습니다. 결론부터 얘기하면 컴파일러가 자동으로 최적화해줘서 동일한 바이트코드를 갖습니다. 참고 1 : http://livingtao.blogspot.com/2007/05/myth-defining-loop-variables-inside.html 참고 2 : https://stackoverflow.com/questions/8803674/declaring-variables-inside-or-outside-of-a-loop 변수 scope ..

Java 2020.08.19

[Java] String.split(".")

문자열을 split(".") 할 때 결과값으로 공백이 나오는 경우가 있습니다. 이는 split() 메서드가 정규식으로 작동하기 때문입니다. 그럼 . 으로 자를 때 어떻게 잘라야 하는지 알아보겠습니다. public class split { public static void main(String[] args) { String str = "dhlee.dev"; String[] arr = str.split("."); System.out.println("split 시작"); for (String s : arr) { System.out.printf("[%s]\t", s); } System.out.println(); System.out.println("split 종료"); String[] arr2 = str.spli..

Java 2020.07.11

[Java] List 중복 제거하기

List 중복제거 List는 기본적으로 중복을 허용합니다. 하지만 때때로 필요에 따라 List의 중복을 제거해야 할 때가 있습니다. 오늘은 List의 중복을 제거하는 방법에 대해 알아보겠습니다. public class ListDistinct { public static void main(String[] args) { List before = new ArrayList(); before.add("1"); before.add("1"); before.add("2"); before.add("3"); before.add("3"); before.add("4"); before.add("7"); before.add("6"); before.add("6"); before.add("5"); before.add("5"); be..

Java 2020.07.09

[Java]Immutable Object(불변객체)

Mutable Object? Immutable Object? Immutable Object(불변객체)는 객체 생성 후 그 상태를 바꿀 수 없는 개체입니다. 다르게 말하면 할당 된 데이터를 바꿀 수 없는 객체입니다. 예를 들어 String[] arr = {"a", "b", "c"}; arr[1] = "z";라고 코드를 작성하면 b가 z로 바뀌는 것을 알 수 있습니다. 이는 할당 된 데이터를 바꾼 것이 되므로 Mutable Object(가변객체)입니다. 불변객체의 가장 대표적인 예로는 String, Integer, Boolean 등이 있습니다.(주의 할 점은 int, boolean등 원시타입이 아니라는 것입니다. 원시타입은 객체가 아닙니다.) String을 예로 들어 보겠습니다. String str = "a..

Java 2020.07.03