Web_Backend/Java2024. 1. 8. 14:15[JAVA] System.out.print~의 사용을 지양해야만 하는 이유를 알아보자(feat,, IO, 휘발성, 출력레벨, 성능저하..)

사실 전부터 'System.out.print()를 사용하면 성능에 좋지 않고 logger가 조금 더 프로젝트 내부에서 출력을 하는 목적에 맞으니 logger를 사용해보세요’라는 피드백을 받고 "System.out의 사용을 지양해야겠구나"라고는 생각하였으나 제대로 파헤쳐 보지 못했는데, 오늘 JAVA교육 수강 중 System.out이 나와 이참에 “대체 왜 System.out은 운영 및 개발환경에서 사용을 지양해야하는지” 알아보고자 한다. +[게시글 작성 마무리 작업 중 추가하는 한 마디] 한번 제대로 파헤쳐보니, 왜 System.out의 사용을 지양해야하는지 이해가 가기 시작했다. 습관적으로, 그리고 logging 프레임워크를 불러와 사용하기 귀찮다는 이유로, 디버깅 상황에서 Sout을 호출하던 습관을 ..

[Java] collectionFramework_Set_HashSet이란?
Web_Backend/Java2023. 9. 18. 13:44[Java] collectionFramework_Set_HashSet이란?

1. CollectionFramework란? 자바에서 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미함. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것. 자바의 인터페이스(interface)를 사용하여 구현됨. 2. Collection Framework 주요 인터페이스 List 인터페이스 Set 인터페이스 Map 인터페이스 List와 Set 인터페이스는 모두 Collection 인터페이스를 상속받지만, Map 인터페이스는 구조상의 차이로 인해 별도로 정의됨. 즉, List 인터페이스와 Set 인터페이스의 공통된 부분을 Collection 인터페이스..

Web_Backend/Java2023. 6. 20. 17:21[JAVA] 재귀함수 vs 반복문

재귀함수란? 📌 자기 자신을 호출하는 함수 재귀함수를 많이 호출하면 Call stack max 에러 발생 반복문이란? 📌 특정 구문을 특정 수만큼 반복하는 함수 재귀함수와 반복문 비교 실행 속도 : 반복문이 재귀함수보다 더 빠름 재귀함수 : 매개변수, 리턴값, 리턴시 돌아가야 하는 위치 등의 정보가 스택에 저장됨 반복문 : 필요 없음(오버헤드 없음) 가족성 : 재귀함수가 가독성이 더 좋음 변수 사용 : 재귀함수 사용 시 변수 사용을 줄일 수 있음 꼬리 재귀함수란? 📌 재귀함수의 오버헤드를 줄이기 위한 방법 일반 재귀 function factorial (number) { if(number === 1) return 1; return n * factorial(n - 1); } 꼬리 재귀 : 재귀함수를 호출한 ..

Web_Backend2023. 6. 20. 17:20[Spring, JAVA] Validation

Validation이란? 📌 [사전] 유효성 검증, 주로 사용자 또는 서버의 요청 내용에서 잘못된 내용이 있는지 확인하는 단계 Validation의 종류 데이터 검증 필수 데이터의 존재 유무 문자열 길이나 숫자형 데이터의 경우 값의 범위 email, 신용카드 번호 등 특정 형식에 맞춘 데이터 비즈니스 검증 서지스의 정책에 따라 데이터를 확인하여 검증 배달앱의 경우 배달 요청 시, 해당 주문 건이 결제 완료 상태인지 확인 등 경우에 따라 외부 API를 호출하거나 DB의 데이터까지 조회하여 검증하는 경우도 존재함 Speing core Tech - Validation란? 📌 Spring 에서는 WEB layer에 종속적이지 않은 Vaildation을 하고자 노력 Spring의 Vaildation( 둘 다 데이..

[JAVA] GC(Garbage collector, Garbage collection)
Web_Backend/Java2023. 6. 15. 13:22[JAVA] GC(Garbage collector, Garbage collection)

GC(Garbage collector)란? 📌 자바의 메모리 관리 방법 중 하나로 JVM의 Heap 영역에서 불필요한 메모리를 주기적으로 삭제하는, 즉 Garbage collection을 해주는 프로세스를 말함. Mark and sweep과 Stop The World를 통함. JAVA에서 객체들은 실질적으로 Heap영역에 생성되고 Method Area나 Stack Area, Root Area에서는 Heap에 생성된 객체의 주소만 참조하는 형식 GC의 대상 Heap 영역에 있는 객체들 중 어디서든 참조하고 있지 않는 (Unreachable한) 객체 GC의 대상 개발자가 메모리 관리, 메모리 누수(Memory Leak)에 대해서 완벽하게 관리하지 않아도 되며, 개발과 비즈니스 로직에만 더 집중할 수 있음 J..

[JAVA] Static
CS/CS2023. 6. 13. 22:25[JAVA] Static

JAVA의 static JAVA의 정적(Static)이란? 📌 [사전] 정적(Static) : 고정된 사전적 의미와는 다르게, 나는 JAVA의 Static을 "공유"의 개념으로 이해했음. JAVA에서는 Static이라는 키워드를 사용하여 정적 멤버인 Static변수(정적필드)와 Static메서드(정적메서드)를 만들 수 있음. 정적 필드와 정적 메소드 : 객체(인스턴스)에 소속된 멤버가 아니라 클래스에 고정된 멤버 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재할 때 클래스별로 관리됨 즉, 클래스의 로딩이 끝나는 즉시 바로 사용할 수 있음 즉, 인스턴스의 생성과 상관 없이 사용할 수 있는 변수이며, 객체 생성 없이 클래스를 통해 메서드를 직접 호출할 수 있는 메서드임 Static 키워드를 통해 ..

Project/(공통)troubleshooting2023. 5. 28. 14:38[troubleShooting, JAVA] method replaceAll in class String cannot be applied to given types; return my_string.replaceAll(letter);

method replaceAll in class String cannot be applied to given types; return my_string.replaceAll(letter); 💡 JAVA에서 String의 replace, replaceAll 함수의 경우, 매개변수로 ([String] 탐색할 요소, [String] 치환할 요소)를 주어줘야 하는데, 치환할 요소를 주지 않았기 때문에 발생한 이슈 에러 코드 /Solution.java:3: error: method replaceAll in class String cannot be applied to given types; return my_string.replaceAll(letter); ^ required: String,String found: S..

Project/(공통)troubleshooting2023. 5. 28. 14:37[troubleShooting, JAVA] optionaldouble cannot be converted to double

optionaldouble cannot be converted to double 💡 자바의 Stream 에서 optional 때문에 발생한 이슈 에러 코드 import java.util.Arrays; class Solution { public double solution(int[] numbers) { return Arrays.stream(numbers).average(); } } /Solution.java:10: error: incompatible types: OptionalDouble cannot be converted to double return Arrays.stream(numbers).average(); ^ 1 error 핵심 요점 stream연산에서 반환한 값이 null일 수 있는 optiona..

Project/(공통)troubleshooting2023. 5. 28. 14:36[troubleShooting, JAVA] bad operand types for binary operator

bad operand types for binary operator 💡 논리 연산자 사용 시 비교 대상 값이 이상하기 때문에 발생한 이슈 에러 코드 /Solution.java:3: error: bad operand types for binary operator '

[Servlet] Dispatcher Servlet
Web_Backend/Spring2023. 5. 28. 14:22[Servlet] Dispatcher Servlet

Dispatcher Servlet Servlet이란? ✅ 서블릿(Servlet)은 클라이언트 요청을 처리하고, 그 결과를 반환하는 웹 프로그래밍 기술을 말함. 자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양을 말하며, 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 코드의 지저분함(모든 서블릿을 web.xml등록 높은 의존성 HttpServlet 기능을 필수로 Override 해야 하고, 더 이상 일반 객체로 사용할 수 없다. 중복되는 작업 모든 서블릿이 공통으로 처리하는 작업이나, 가장 우선시 되야하는 작업 Dispatcher Servlet이란? 📌 Servlet Container에서 HTTP프로토콜을 ..

Web_Backend/Java2023. 5. 26. 14:44[JAVA] Stream API

Java Stream API 💬 Java Stream API란 무엇인가요? ✅ (정리 중) Stream API란? 📌 데이터를 추상화하고, 처리하는데 자주 사용되는 함수를 정의해 둔 것. JAVA JAVA는 객체지향 언어이기 때문에, 기본적으로 함수형 프로그래밍이 불가능하다. 하지만 JAVA8부터 Stream API와 람다식, 함수형 인터페이스 등을 지원하면서 JAVA를 지원함으로써 함수형으로 프로그래밍을 할 수 있는 API들을 지원해주고 있다. 그중에서 Stream API는 위에 설명했듯이 데이터를 추상화하고 처리하는 데 사용된다. 즉, 데이터의 종류에 상관없이 같은 방식으로 데이터를 처리할 수 있다는 것을 의미하며, 그에 따라 코드의 재사용성을 높일 수 있다. 예시 코드 Stream 활용 전 : 원본..

Web_Backend/Java2023. 3. 19. 20:35[JAVA] String, String Builder, String buffer 차이

JAVA에서 문자열을 다루는 대표적 클래스 - String : 문자열에 대한 연산이 적을 때, 멀티스레드 환경일 경우. - String Buffer : 문자열 연산이 많고, 멀티쓰레드 환경일 경우. - String Builder : 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우. 1. String - String은 '불변(immutable)'속성을 지님. 따라서, 문자열 수정 시점에 새로운 String 인스턴스가 생성. String str = "hello"; //"hello" 메모리 주소 aaaa str += " world"; //"hello world" 메모리 주소 bbbb(aaaa -> GC의 제거대상) ㄴ 위의 예시에서 볼 수 있듯이 String 문자열의 연산을 진행할 경우..

image