[Java] 익명 클래스와 람다(Lambda) 정리
·
Programming/Java,Back-end
익명 클래스(Anonymous Class)익명 클래스란?익명 클래스는 상속 받는 클래스를 명시적으로 별도의 Java 파일을 통해 클래스를 만드는 것이 아닌, 코드 내부에 이름이 존재하지 않는 클래스를 만드는것이다. 예시 코드public class Coffee { public void make() { System.out.println("Make!!"); }}public class Main { public static void main(String[] args) { // TODO : Coffee 클래스를 상속 받는 익명 클래스 Coffee coffee = new Coffee() { // make 메서드 오버라이드 ..
[Gradle] runtimeOnly, implementation, compileOnly, api 차이
·
Programming/Java,Back-end
classpath우선 가장 먼저 classpath의 개념과 종류를 알아보자.classpath는 클래스나 jar 파일이 존재하는 위치다. JVM이 프로그램을 실행할 때, 클래스 파일을 찾는데 기준이 되는 경로를 말한다. compileClassPath vs runtimeClassPathGradle 프로젝트의 의존성 관리를 위해 사용되는 두가지 속성이다. compileClassPath프로젝트의 소스 코드를 컴파일 하는 동안 필요한 모든 클래스 파일과 라이브러리를 포함한다. runtimeClassPath프로젝트를 실행할 때 필요한 모든 클래스 파일과 라이브러리를 포함한다. 초록색은 사용자가 의존성을 선언할 때 사용한다.분홍색은 구성요소가 라이브러리를 컴파일하거나 실행할 때 사용한다.파란색은 구성 요소 자체 사용..
[Java] 메인 메소드 존재 이유, 매개변수 String[] args에 대하여
·
Programming/Java,Back-end
✔️ 메인 메소드(main method)의 역할 자바 이외에도 C언어 등 프로그래밍 언어에는 메인 메소드/메인 함수가 존재한다. 과연 이 메인의 역할이라는게 뭘까? 왜 존재하는걸까?메인 메소드 및 함수는 프로그램 실행을 위한 시작 지점 역할을 한다.  프로그래밍이 시작되는 메모리 할당 시점부터 진입을 위한 함수가 필요하다.  그러나, 메인 메소드가 존재하지 않으면 프로그램은 도대체 어떤 코드부터 읽어서 어떻게 시작해야될지를 모른다. 그렇기에 이 메인 메소드가 존재해야 프로세스화 될 수 있고 실행이 될 수 있다.메인 메소드가 반드시 있어야 프로그램으로써 가치를 만들어갈 수 있다. ✔️ 매개변수 String[] args자바의 메인 메소드 코드를 살펴보자.public static void main(String..
BCrypt matches 동작 방식 : 매번 다른 해싱에도 일치 검증 가능한 이유
·
Programming/Java,Back-end
BCrypt로 인코딩을 해보면 같은 평문이라도 해싱 결과값이 매번 다른데,어떻게 두 문자열의 값이 같다고 판단하는 걸까?   BCrypt Encode (암호화 과정)BCrypt는 무작위로 생성되는 솔트라는 데이터를 해시 과정에서 비밀번호에 추가하여 해시 결과가 매번 달라지도록 만든다.@Overridepublic String encode(CharSequence rawPassword) { if (rawPassword == null) { throw new IllegalArgumentException("rawPassword cannot be null"); } String salt = getSalt(); return BCrypt.hashpw(rawPassword.toString(), salt);} getSalt..
ObjectMapper 싱글톤 빈으로 사용해도 될까?
·
Programming/Java,Back-end
서론프로젝트에서 JSON 데이터의 직렬화 및 역직렬화 작업을 위해 Jackson의 ObjectMapper를 사용하고 있다. 효율적인 데이터 처리와 성능 최적화를 위해 객체 재사용이 중요하다. 이에 따라 ObjectMapper를 싱글톤 빈으로 사용하는 것이 적절한지에 대한 고민이 필요하다. 📌 ObjectMapper는 Thread-safe 할까?✔️ 결론 : 완전히 thread-safe하다고 말할 수 없다. Jackson의 ObjectMapper는 스레드 간에 공유되어도 안전하게 설계된 부분이 있지만, 완전히 스레드 안전하다고는 할 수 없다. ObjectMapper 인스턴스를 만드는 데 비용이 크기 때문에 인스턴스를 생성하고 재사용하는 게 권장된다. ObjectMapper itself is only th..
DAO와 Repository는 다른 개념일까?(차이를 구분할때의 장점)
·
Programming/Java,Back-end
DAO(Data Access Object)DAO는 데이터 영속성을 추상화한 개념으로, 데이터베이스 테이블 중심의 기본 storage에 가까운 개념이다.대부분의 경우 DAO는 데이터베이스 테이블과 일치하므로 까다로운 쿼리를 추상화하여 스토리지에서 데이터를 보다 간단하게 전송하고 검색하는 기능을 수행한다. User 도메인 클래스public class User { private String name; private String email; //getters and setters}  User 도메인에 대하여 CRUD 연산을 수행할 수 있는 UserDao 인터페이스public interface UserDao { void create(User user); User read(Long id); voi..