본문 바로가기

CS study/java

(16)
람다(Lambda)식의 정의와 함수형 인터페이스, 메서드 참조 https://www.youtube.com/watch?v=4ZtKiSvZNu4 먼저 해당 포스팅은 다음 유튜브 설명을 참조했음을 미리 밝힌다. 이해에 큰 도움이 되니 먼저 확인해보길 권장한다. 이후 시간이 된다면 스트림 포스팅 역시 확인하면 도움이 될 것이다. https://csg1353.tistory.com/214 기초 개념 자바에서 람다 표현식과 스트림 API는 코드를 더 간결하고 명료하게 만들어주는 강력한 기능이다. 람다 표현식은 익명 함수의 한 형태로, 간결한 방식으로 메소드를 전달할 수 있는 기능을 제공한다. 스트림 API는 데이터 컬렉션을 선언적으로 처리할 수 있도록 해주며, 람다 표현식과 함께 사용될 때 더욱 효과적이다. 람다(Lambda) 메서드를 하나의 식으로 표현한 것 람다 (lambd..
[DataSource]HikariCP DataSource 연동 과정 및 구현체 https://www.javadoc.io/doc/com.zaxxer/HikariCP/latest/com.zaxxer.hikari/com/zaxxer/hikari/package-summary.html com.zaxxer.hikari package summary - HikariCP 5.1.0 javadoc Latest version of com.zaxxer:HikariCP https://javadoc.io/doc/com.zaxxer/HikariCP Current version 5.1.0 https://javadoc.io/doc/com.zaxxer/HikariCP/5.1.0 package-list path (used for javadoc generation -link option) https://javadoc..
[디자인 패턴]프록시(Proxy) 패턴 설명과 예시 https://refactoring.guru/ko/design-patterns/proxy 프록시 패턴 / 디자인 패턴들 / 구조 패턴 프록시 패턴 다음 이름으로도 불립니다: Proxy 의도 프록시는 다른 객체에 대한 대체 또는 자리표시자를 제공할 수 있는 구조 디자인 패턴입니다. 프록시는 원래 객체 refactoring.guru 개요 프록시 패턴은 구조 패턴의 하나로, 어떤 객체에 대한 접근을 제어하는 대리인(프록시) 객체를 두어 직접적인 접근을 방지하는 패턴이다. 이 패턴은 실제 서비스 객체의 참조를 감싸는 프록시 객체를 생성하여, 클라이언트가 서비스 객체에 접근할 때 프록시 객체를 통해 간접적으로 접근하게 만든다. 프록시 패턴은 접근 제어, 비용이 많이 드는 연산의 지연 실행, 원격 객체의 접근 등 ..
예시를 통해 알아보는 Java의 Call by Value, Call by Reference 개념 개요 java에서는 call by value로 jvm이 동작하고, c++등에서는 call by reference로 참조에 의한 복사로 객체들이 생성되고 동작된다고 한다. (물론, 최신 트렌드에서는 이를 적당히 합하여 사용한다. 원론적인 이야기이다.) 오늘은 이 개념에 대해 의의와 실제 동작 과정에서 어떻게 이루어지는지 알아볼 것이다. 한 눈에 보는 두 개념의 차이 요약 : 참조에 의한 호출은 그냥 무조건 메모리 주소 자체를 참조하는 거고, 값에 의한 호출은 그 값의 복사본을 만들어서(만들때 원본을 참조) 운영한다는 차이이다. Call by reference : 원본 데이터 자체를 직접 조작. Call by value : 원본 데이터를 보호하면서 독립적인 복사본을 통해 작업을 수행. call by valu..
URI/URL/URN, Restful 원칙 개요 기존 개념의 추가 정의 시간이다. 알고는 있었지만 명확하게 설명하지 못했던 내용들을 다시 복기하고, 정리하고자 한다. Restful을 설명하기 전에, 헷갈렸던 URI/URL부터 짚고 넘어가 보자. URI/URL/URN 1. URI (Uniform Resource Identifier) 정의: URI는 인터넷에서 자원을 식별하는 데 사용되는 문자열이다. '자원'은 웹 페이지, 문서, 이미지, 파일, 그리고 백엔드에서 자주 사용하는 API Endpoint 를 포함하는 개념이다. 기능: URI는 특정 자원을 식별하고, 해당 자원이 어떻게 접근될 수 있는지에 대한 정보를 제공한다. 종류: URI에는 두 가지 주요 형태가 있다. URL (Uniform Resource Locator) URN (Uniform R..
SOLID 5원칙에 대해 java에서 항상 나오던 기본 원칙 중 하나인 SOLID를 예시를 들어 설명하고자 한다. 개념 자체는 알고 있지만 구체적인 예시를 떠올려 보다 생각나 포스팅하였다. SRP(Single Responsibility Principle) : 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다는 원칙. 개인적으로 비교적 가장 쉬운 개념이라 생각이 든다. 객체지향적으로 만들어진 모든 Class들은 각각의 역할에 맞는 메서드, 변수, 책임 등을 가져야 한다. 로그인 클래스가 존재한다면 이 클래스는 로그인에 관련된 기능만을 가져야 한다. 수정, 삭제, 확장 역시도 로그인에 관련된 내용일 것이다. OCP(Open - Closed Principle) 개방 - 폐쇄 원칙 기능의 개방(확장)에는 열려 있고, 변경에는 닫혀..
[해시 테이블].. equals와 hashcode를 사용한 객체 비교 탐구(유익) 장장 3.5시간동안 고민하고 찾아봤던 나의 기록을 정리하고자 한다. 알고리즘 문제를 풀던 도중, 의문이 생겨 레퍼런스를 조사하고 정리한 내용이다. 가장 큰 의문의 시발점은 다음과 같았다. "기본형 및 String은 ==나 equals로 참 거짓을 판단할 수 있는데, 내가 만든 Class 객체들도 이걸 사용할 수 있을까?" 결론부터 말하자면 가능하다. Object에서 기본적으로 지원하는 equals 메서드를 자체적으로 Override하면 된다. HashSet -> HashMap -> contains~() -> getNode() -> equals and Hash을 통해 비교하기 때문 내가 궁금했던 HashSet이나 HashMap의 자료구조에서 사용하는 contains도 결국에는 equals와 hashcode..
[Java] 인터페이스와 추상 메서드, 일반 메서드 추상클래스가 생긴 이유가 뭘까? 추상 클래스는 자체적으로 인스턴스로 구현할 수 없다. = 인스턴스로 구현하고 싶다면 하위 클래스가 상속(extend) 추상적인 부분을 Override로 구현해야 한다! 상속을 받는데, 내 하위 클래스가 이 기능(메서드)를 가지게 하고 싶다. 근데 무슨 기능인지는 잘 모르지만.. 어쨌든 구현해야 한다!! 아마도 일반 메서드와 가장 큰 차이라고 생각한다. 그럼 구현하지도 못할 메서드를 도대체 왜 사용하는 걸까? 추상 클래스가 있는 이유는 여러 가지다. 공통 로직 중복 제거 상속을 받는 하위 클래스들이 공통으로 사용하는 로직이나 속성을 한 곳에서 관리할 수 있다. = 추상 메서드를 상속받는 하위 클래스들은, 추상클래스의 메서드를 공통으로 가지게 된다. 템플릿 제공 추상 클래스에..