전체 글 46

Singleton

정의객체의 인스턴스가 오직 1개만 생성되는 패턴을 말한다.클래스의 인스턴스가 오직 하나만 생성되는것을 보장하고 해당 인스턴스에 전역적으로 접근할 수 있는 방법을 제공하는 패턴이다.싱글톤의 단점private생성자를 가지고 있어 상속이 불가능하다테스트하기 어렵다생성방식이 제한적이고 Mock객체로 대체하기 어려우며 동적으로 객체를 주입하기도 어렵기 때문이다.서버환경에서 싱글톤이 1개만 생성됨을 보장하지 못한다.클래스로더를 어떻게 구성하느냐에 따라서 싱글톤이지만 1개이상의 객체가 생성될 수 있다. 자바언어를 이용한 싱글톤 기법은 서버환경에서 싱글톤을 보장하지 않는다. 분산환경에서도 싱글톤을 보장하기 어렵다전역상태로 인한 문제싱글톤의 스태틱메소드를 사용하여 언제든지 해당 객체를 사용하도록 전역설정을 할 수 있다...

카테고리 없음 2024.03.16

Java Input/Output(I/O)

배경java는 데이터 입력, 출력과 관련하여 추상클래스와 다양한 구현클래스를 제공한다.InputStream : AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStreamReader : BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader, URLReaderOutputStream : ByteArrayOutputStream, FileOutputStream, FilterOutput..

Java 2024.03.07

Java.lang

java.lang이란?자바 언어로 개발하기위한 기본적인 기능들이 담겨져 있는 패키지숫자에 대한 참조자료형과 기본자료형자바에서는 숫자를 처리하기 위한 자료형으로 같은 유형의 값을 다루지만 기본자료형과 참조자료형 두가지가 존재하고 참조자료형은 기본자료형처럼 형변환 없이 사용하는것을 컴파일러에서 지원한다. 그 이유는 다음과 같다.매개 변수를 참조자료형으로만 받는 메소드를 처리하기 위해서이다.제네릭과 같이 기본자료형을 사용하지 않는 기능을 사용하기 위해서이다.최소값이나 최대값과 같이 클래스에 선언된 상수값을 사용하기 위해서이다. → 숫자의 참조료형 클래스들은 MIN_VALUE와 MAX_VALUE라는 상수값을 가지고 있다. 이 값들은 각 자료형들의 최소최대값 범위를 나타낸다.문자열과 숫자간 변환을 쉽게하고 2,8..

Java 2024.03.05

Java Collection

자바에서 제공하는 Collection interface에 대해서 정리한 내용 Java에서 Collection이란?여러 데이터를 담을 수 있는 자료구조를 뜻한다. 기존 배열과의 차이점으로 데이터의 갯수에 따라서 동적메모리 할당이 가능하다.Iterable인터페이스를 상속받는다. 기본적으로 Iterable인터페이스를 사용하여 순차적으로 데이터를 가져올 수 있다는것을 의미한다. 향상된 for문을 쓸 수 있다는걸 의미하기도 한다.컬렉션의 인터페이스는 List, Set, Queue, Map으로 구분할 수 있다. 이 중에서 Map은 Collection Interface를 상속받고 있지 않지만 Collection으로 구분한다.Java에서 자료구조의 분류선형자료구조(Linear Data Structure) : List,..

Java 2024.03.02

로드밸런서Load Balancer

배경서버에 많은 클라이언트의 요청을 응답하기 어려울 경우, 문제해결 방법으로는 크게 두가지가 있다.scale-up : 서버가 더 빠르게 동작하도록 단일서버의 하드웨어의 성능을 올리는 방법scale-out : 하나의 서버보다는 여러대의 서버가 나눠서 일을 하는 방법. 무중단서비스를 재공할 수 있다.로드밸런서는 이 중 scale-out에 관한 방법이다.정의클라이언트의 요청에 대하여 각각 서버의 부하,속도저하를 고려하여 적절히 분산처리해주는 것을 말한다.트래픽을 여러대의 서버에 균등하게 분산시켜주는 역할을 한다.분산방식Round Robin라운드로빈서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식을 말한다.Least Connections최소 연결 방식연결개수가 가장 작은 서버를 선택하는 방식트래픽으로 인하여..

카테고리 없음 2024.02.29

JPA

정의Java Persistence API. 자바에서 ORM기준 표준으로 사용되는 인터페이스 모음을 말한다.자바 어플리케이션에서 관계형 데티어베이스를 사용하는 방식을 정의한 인터페이스인터페이스이기 때문에 별도로 JPA의 구현체가 필요하다. 대표적으로 Hibernate가 있다.정리 : 자바의 ORM기술표준으로 인터페이스의 모음이 됩니다. 엄밀히 따지면 인터페이스이기 때문에 Hibernate와 같은 구현체가 필요하고 스프링에서는 SpringDataJPA를 통해 JPA를 사용합니다. JPA를 사용하면 개발자가 쿼리를 직접 작성하지 않고도 db테이블과 맵핑되어있는 엔티티 모델클래스와 자바메소드를 이용하여 DB를 조작할 수 있게 만들어줍니다.특징영속성 컨텍스트엔티티를 DB에 영속화 시킬수 있는 환경을 말한다. 엔티..

카테고리 없음 2024.02.22

Hash Collision 해시 충돌

정의해시값을 이용하여 데이터를 저장할때 해시주소가 겹쳐 충돌하는 경우 생기는 문제Open Addressing / Separate Chaining 두가지 방법으로 해결을 한다Open Addressing저장하려는 데이터에 할당한 해시주소가 이미 존재한다면 다른 주소로 새롭게 할당하는 방식Separate Chaing해시 테이블의 구조를 변경하여 하나 이상의 키값을 저장할 수 있도록 만드는 방법Java에서는 Separate Chaing를 사용하여 해쉬 충돌을 해결해시 충돌의 해결 방법1. Chaning해시 버킷내 링크드 리스트를 할당하여 버킷에 데이터를 삽입하다 해시 충돌이 발생하면 링크드 리스트로 데이터를 연결하는 방식장점링크드 리스트 하나로 해결 가능하기에 복잡한 계산식을 사용할 필요가 없다.개방주소법의 선..

카테고리 없음 2024.02.15

Spring과 Spring Boot의 차이점

어렴풋이 대충 알고 있던 내용을 정리해본다 공통점Spring 생태계 기반 자바 프레임 워크Spring개발자가 직접 설정파일을 작성해야 하는 부분의 리소스가 크다. 모든 빈 객체 등록, 객체 간 의존성 설정, 컴포넌트 구성을 해야함별도로 was를 설치하고 설정하는것이 필요배포시 war파일을 생성해서 Tomcat에 배포해야함Spring Boot간결한 설정 & 자동 구성보일러 플레이트 코드 최소화 - 보편적으로 많이 사용되는 트랜잭션 매니저, JDBC Template등을 기본적으로 Bean으로 등록되어있음XML 설정 불필요어노테이션을 통해 컴포넌트들을 스캔하여 자동으로 Bean에 등록(@Component, @Controller, @Service…)의존성 & 버전 관리 간소화Starter를 통한 dependen..

카테고리 없음 2024.02.14

Effective Java 정리 #1

이펙티브 자바 3판 2장에 해당하는 아이템중 스스로 정리가 필요하다고 생각되는 내용들을 정리했다. 아이템 1 생성자 대신 정적 팩토리 메소드를 고려하라 클래스의 인스턴스를 얻는 수단은 public 생성자가 있지만 그 외에 정적 팩토리 메소드를 제공하는 방법이 존재한다. 클래스의 인스턴스를 반환하는 단순한 정적 메소드를 이야기한다. 장점 정적 팩토리 메소드를 사용하는 경우 이름을 지을 수 있다. 반환될 객체의 특성을 이름에서 나타내는것이 가능하여 가독성을 높인다 자바에서 하나의 시그니쳐로는 생성자를 하나만 만들 수 있다. 임시방편으로 전달하는 파라미터의 순서를 변경하는 방법으로 이 제한을 회피할 수 있지만 좋은 방법은 아니다. 파라미터의 순서로는 각 생성자의 역할을 나타내기 충분하지 않다. 호출될때 마다 ..

Java 2023.12.10

이펙티브 파이썬 2nd 정리 #5

38. 간단한 인터페이스의 경우 클래스 대신 함수를 받아라 요약 간단한 인터페이스가 필요할때는 클래스를 만들고 인스턴스로 생성해서 쓰는 대신 간단하게 함수를 활용할 수 있다. 상세 defaultdict는 없는 키로 접근하는 상황에서 호출할 함수를 넘겨 받습니다. def log_missing(): print('Key added') return 0 # 특정상황에서 넘겨 준 log_missing함수를 실행 # 인자로 받는 함수를 훅이라고 함 current = {'green': 12, 'blue': 3} increments = [ ('red', 5), ('blue', 17), ('orange', 9), ] for key, amount in increments: result[key] += amount print(..

python 2023.09.08

이펙티브 파이썬 2nd 정리 #4

34. send로 제네레이터에 데이터를 주입하지 말라 요약 send()를 통해서 데이터를 제네레이터에 주입할 수 있다. 제네레이터는 send()로 주입돤 값을 yield식이 반환하는 값을 통해 받으며 이 값을 변수에 저장하여 활용 할 수 있다. send()와 yield from식을 함께 사용하면 제네레이터의 출혁에 None이 반환되는 의도하지 않은 결과를 얻을수도 있다. 합성할 제네레이터들의 입력으로 이터레이터를 전달하는 방식이 send()를 사용하는 방식보다 더 낫다. send()는 가급적 사용하지 않는것을 권장한다 제네레이터는 이터레이터를 생성하는 함수로, 함수 실행 중 yield 키워드를 사용하여 값을 반환하고 함수의 상태를 유지합니다. 제네레이터는 함수 호출과 달리 값을 한 번에 하나씩 반환하며,..

python 2023.09.01

이펙티브 파이썬 2nd 정리 #3

21. 변수 영역과 클로저의 상호 작용 방식을 이해하라 파이썬은 클로저를 지원한다 클로저 : 자신이 정의된 영역 외부의 변수를 참조하는 함수 파이선에서는 함수가 일급 시민 객체다 일급시민 : 객체를 직접 가리킬 수 있고, 변수에 대입하거나 다른 함수에 인자로 전달할 수 있으며 식이나 if문에서 함수를 비교하거나 함수에서 반환하는 것 등이 가능하다는 것을 의미한다. 파이썬에는 시퀀스(튜플 포함)를 비교하는 규칙이 존재한다 시퀀스를 비교할 때 각 시퀀스의 0번 인덱스를 비교합니다. 시작 부분의 요소가 같다면 다음 인덱스의 요소를 비교하고 요소가 같지 않다면 비교 결과를 반환합니다. 시퀀스의 값을 비교할 수 없는 경우 TypeError를 발생시킵니다. 파이썬에서 클로저를 사용할 때 변수 스코프가 어떻게 작동하..

python 2023.08.18