애플리케이션 개발/JAVA 36

[JAVA] NULL 처리를 잘하자

🔍 null 처리를 잘하자 – 진짜 실수는 예외가 아니다최근.. 회사에서 NULL 처리가 안되서 오류나는 사건들이 속출하고 있다.진짜 기본적인건데 생각하기 어렵기 때문에 오늘도 다짐을 하고 가본다.. ☠️ null은 조용히, 하지만 확실하게 망친다개발하면서 가장 흔하게 마주치는 오류 중 하나가 바로 NullPointerException(NPE)입니다. 특히 Java 개발자라면 null 체크는 거의 반사적으로 하게 되는 루틴이죠. 그런데, 언제부턴가 이게 "습관"이 되어버린 건 아닌지 한번 돌아보게 되더군요.그냥 if (obj != null)로 막기만 한다고 해서 진짜 null 처리를 잘하고 있는 걸까요? ✅ null 처리를 잘 한다는 건?null 처리를 “잘 한다”는 건 단순히 예외를 회피하는 것이..

[JAVA] 런타임 시점과 컴파일 시점의 차이

JPQL 과 QueryDSL의 차이가 런타임 시점과 컴파일 시점의 차이라고 보니, 이 둘의 차이점에 대해서 명확하게 알고 싶어졌다. 런타임 시점과 컴파일 시점은 프로그램이 실행되는 시기의 차이를 나타낸다고 한다. 컴파일 시점 컴파일 시점은 소스 코드를 컴파일하여 실행 파일로 만드는 시점이다. 이 시점에서는 코드의 문법적 오류를 검사하고, 컴파일러가 코드를 기계어로 번역하여 실행 파일을 만든다. 따라서 컴파일 시점에서는 코드의 문제를 발견하고 수정할 수 있습니다. 런타임 시점 런타임 시점은 프로그램이 실행되는 시점이다. 이 시점에서는 실행 파일이 메모리에 로드되어 프로그램이 실행되기 때문에, 런타임 시점에서는 코드의 문제를 발견하고 수정하기가 어렵다. 예를 들어, JPQL은 런타임 시점에 쿼리를 생성하고 ..

[JAVA] 변수의 종류와 메모리 구조

변수의 종류 public class Test{ public static int cv; // 클래스 변수. private int iv; // 인스턴스 변수. public void print(){ int lv; // 지역 변수. } } 1. 클래스 변수 (Class variables) - 메소드 영역 - 인스턴스 변수 중 타입 선언 앞에 static 이라는 예약어가 있는 변수 - 클래스가 처음 호출될 떄 시작하여 프로그램이 끝날 때 소멸 - 자주 사용되고 변함 없는 자료일 경우 클래스 변수에 선언함 2. 인스턴스 변수 (Instance variables) - 힙 영역 - 메소드 밖, 클래스 안에 선언된 변수 - 객체가 생성될 때 시작 해당 객체를 참조하는 객체가 없을 때 소멸 3. 지역 변수 (Local v..

[JAVA] String vs new String()

String s1 = "Cat"; String s2 = "Cat"; String s3 = new String("Cat"); new 연산자를 통해 String을 생성하면 힙 영역에 존재하게 되고, 리터럴을 이용할 경우 힙 영역 안에 String constant pool 이라는 영역에 존재하게 된다. equals 연산자는 단순 문자열을 비교한다면, == 연산자는 두 객체의 주소값을 비교하기 때문에, s1과 s3은 다른 것이다. 상수 풀(Constant pool) 힙 영역의 Permanent area(고정 영역)에 생성되어 Java 프로세스의 종료까지 계속 유지되는 메모리 영역 기본적으로 JVM에서 관리하며 프로그래머가 작성한 상수에 대해서 최우선적으로 찾아보고 없으면 상수풀에 추가한 이후 그 주소값을 리턴한..

[JAVA] Java Serialization

자바 직렬화 자바 클래스들이 Serializable 인터페이스를 상속받는 이유에 대해서 알아보자\ 자바 직렬화 이유 Java 내부 시스템에서 사용되는(또는 JVM 메모리에 올려진) 객체나 데이터를 외부에서 사용할 수 있도록 Byte 형태로 변환하는 것. (Vice Versa) 대부분 OS의 프로세스 구현은 서로 다른 가상메모리주소공간(Virtual Address Space, VAS)를 갖기 때문에 Object 타입의 참조값(주소값) 데이터 인스턴스를 전달할 수 없다. 때문에 서로 다른 메모리 공간 사이의 데이터 전달을 위해서는 메모리 공간의 주소값이 아닌 Byte 형태로 직렬화(변환)된 객체 데이터를 전달하면, 사용하는 쪽에서 역직렬화하여 사용할 수 있게 된다. public class HashMap ex..

[JAVA] stream groupingBy

중복된 쿼리를 사용하고 싶지 않아 데이터를 자바에서 가공하였다. groupingBy 를 사용하여 a, b 조합으로 group by를 하였고, summingInt로 그룹화한 조건의 수량을 더하는 작업을 하였다. List list = new ArrayList(); Map stockList = list .stream() .collect( Collectors .groupingBy( i -> Pair.of(i.get("a"), i.get("b")), Collectors.summingInt(j -> (int) j.get("productAmount")) ) ); stockList.forEach((key, value) -> { log.info(String.valueOf(value)); Pair k = (Pair)key..

[JAVA] 코딩 테스트 함수 정리

정리중! //// List List list = new ArrayList(); // 정렬 Collections.sort(list); // size int size = list.size(); //// Array int [] Arr=new int[5]; // 정렬 Arrays.sort(Arr); //String to Char array String st = "programmer"; char[] ch = new char[st.length()]; for(int i = 0; i < st.length(); i++){ ch[i] = st.charAt(i); // ch[0] = st.toCharArray(); } System.out.print(ch[3]); // 배열 범위 지정 int[] temp = Arrays.co..

[JAVA] UnsupportedOperationException 에러

JUnit5 테스트를 하던 도중, 파라미터 값들을 리스트로 만들어야 하는 경우가 있었다. 이 때, 리스트를 객체로 생성하지 않고서는 add를 사용 할 수가 없었다. 이는 Arrays.asList()는 java.util.ArrayList 가 아니라 Arrays 안에 있는 inner class를 사용하고 있는 것이며, 이 안에는 add나 addAll이 없다고 한다. 따라서 ArrayList로 선언하고 add나 addAll을 사용하면 된다. 기본에 사용한 코드 List path_parameters = Arrays.asList(parameterWithName("A").description("a")); List request_parameter = Arrays.asList( parameterWithName("B")..

반응형