Java/공부공부 (27) 썸네일형 리스트형 [JAVA] 타입 소거 (Type Erasure) 자바의 타입 소거? 자바의 설계 철학과 하위 호환성 때문에 생긴 개념. 기존 자바코드(JDK 1.4 이하)는 아래처럼 타입 안정성이 보장되지 않았었는데List list = new ArrayList();list.add("hello");list.add(123); // 문제 없음자바5부터 아래처럼 제네릭이 도입되면서 컴파일 과정에서 데이터 타입을 검사하게 됨.List list = new ArrayList();list.add("hello");list.add(123); // 컴파일 에러 제네릭 기능을 기존 자바 코드와 호환되게 하면서도, JVM 구조를 변경하지 않고 도입하기 위한 기법이 타입 소거!!컴파일 시에 제네릭을 검사하지만, 컴파일 이후에는 타입 정보가 사라지게 된다. 이로 인해 아래의 문제점들이 발생.. [Java] ObjectMapper (2) TypeReference, 설정메서드, 어노테이션 * TypeReference Jackson의 ObjectMapper에서 제공하는 클래스로역직렬화(deserialization) 과정에서 제네릭 타입 정보를 전달하기 위해 사용.** 단일 객체가 아닌 복잡한 타입인 경우, 런타임에 타입 정보가 사라지기 때문에 명시적으로 타입을 전달해줘야함. List, Map, List> JSON 문자열 --> List String json = "[{\"name\":\"phyho\",\"age\":10}]";List users = mapper.readValue(json, new TypeReference>() {}); JSON 문자열 --> MapString json = "{\"name\":\"phyho\", \"age\":10}";Map map = mapp.. [Java] ObjectMapper (1) 주요 메서드 * ObjectMapper Jackson 라이브러리에서 제공하는 클래스로 JSON 데이터와 Java 객체 간의 직렬화 및 역직렬화에 사용. ( Java 객체 ↔ JSON ) ex) User 클래스public class User { private String name; private int age; // 생성자와 getter/setter 필수 public User() {} public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } .. [Java] "".equals(null) (equals 메서드) String.equals(Object obj) 메서드는 내부적으로 매개변수가 null일 경우 false를 반환한다.null.equals("")는 예외를 발생시키지만, "".equals(null)은 안전하게 false를 반환!! (equals메서드 내부로직)@Overridepublic boolean equals(Object anObject) { if (this == anObject) { // 같은 객체인지 확인 return true; } if (anObject instanceof String) { // anObject가 String 타입인지 확인 String anotherString = (String) anObject; int n = value.le.. [JAVA] Thread.sleep() Thread.sleep()현재 실행 중인 스레드의 실행을 일시적으로 멈추게 하는 메서드. Thread.sleep(milliseconds);Thread.sleep(milliseconds, nanoseconds); - milliseconds : 대기 시간 (밀리초) - nanoseconds : 추가 대기 시간 (나노초) ex) public class SleepExample { public static void main(String[] args) { System.out.println("Start"); try { Thread.sleep(2000); // 2초 동안 멈춤 } catch (InterruptedException e) { .. [JAVA] port연결 확인 스케줄러 (ScheduledExecutorService, CountDownLatch) * port 연결 여부 확인 스케줄러 public int portWatcher(String port) throws InterruptedException { final int[]count = {0}; ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); CountDownLatch latch = new CountDownLatch(1); Runnable checkPortTask = new Runnable() { @Override public void run(){ try { Sock.. [JAVA] JAR & WAR * JAR 파일 & WAR 파일 : Java 애플리케이션을 배포하기 위한 파일 형식. [ JAR _Java ARchive ]용도:주로 Java 애플리케이션, 라이브러리, 플러그인을 배포하는 데 사용.독립 실행형 Java 애플리케이션을 실행할 수 있도록 지원.내용물:Java 클래스 파일, 메타데이터, 리소스 파일(이미지, 텍스트 파일 등)을 포함.META-INF/MANIFEST.MF 파일을 통해 메타데이터와 메인 클래스를 지정.실행 방식:독립 실행형 애플리케이션의 경우, java -jar yourapp.jar 명령어로 실행.라이브러리로 사용될 경우, 다른 Java 애플리케이션에서 이 JAR 파일을 참조.구조:간단하고 특정 구조를 따르지 않음.모든 파일이 루트 디렉토리에 배치될 수 있음. [ WAR _W.. [기타] System.out.println 실무에서 사용하면 안되는 이유 https://systemdata.tistory.com/21 System.out.println 메소드는 실무에서 `절대 사용하지마라.`목차개요System.out.println 무엇인가?왜 사용해서는 안되는가?로그를 남기면 안되는 것인가?결론1. 개요프로그래밍을 처음 접하면 System.out.println(”Hello World”);같이 콘솔에 출력하는 것을 배우게systemdata.tistory.com 실무에서 사용하면 안되는 이유. - 동기화된 블로킹 I/O 방식이기 때문에 성능 저하 문제 발생. (오버헤드 발생) => Log4j, SLF4J 같은 비동기 로깅 프레임워크 사용! I/O를 비동기적으로 처리하고, 멀티스레드 환경에서 성능을 더 효과적으로 관리한다. - 로그 레벨을 지정할 수 .. 이전 1 2 3 4 다음