일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 알고리즘공부
- 플러터 공부
- 기술면접공부
- JPA스터디
- 플러터 개발
- 자료구조공부
- querydsl
- 프로그래머스
- nestjs
- 스프링
- Axon framework
- nestjs공부
- 자바공부
- JPA예제
- Flutter
- JPA 공부
- 스프링 공부
- JPA공부
- nestjs스터디
- 스프링부트공부
- 스프링부트
- 카프카
- 코테준비
- JPA
- 코테공부
- Kafka
- 기술공부
- K8S
- DDD
- 스프링공부
- Today
- Total
목록Language/[Java] (91)
DevBoi
프로그램에서 미리 정해놓아야할 값들, 상수값들이 존재할때 사용한다. 특정 enum에 대한 값을관리할 수도있고 클래스로 빼서 생성자를 호출해서, 값을 지정, 저장 할 수도 있다. 상수를 해당 과 같이 정의 한다고 가정해보자 메인에서는 각 상수 타입별로, 할당된 값을 가지고 사용하면 되기 떄문에, 타입이 변경되거나, 로직이 변경된다고 해도, 값이 변경되지 않아도 된다. 또한 타입에 대한 별도 if 로직을 작성하지 않아도 된다. 이런 방식으로, 해당 값에 대한 배열 형태로 가져와서 출력 할 수도있고 해당 상수에 대한 별도 메서드를 만들어서 뿌려줄 수도 있다. 무튼, 특정 상수에 대해서 미리 정의 해놓고, static 하게 값을 관리할 수있다. 또한 추상 메서드를 기점으로, 위와 같이 개발 로직을 설계할 수도있..
자바 8에서 추가된 Optional과 Stream에 대해서 공부를 해보자 공부 관련 실습해보기 전에 간단하게 특징 및 장단점을 정리해보자 -특징 Java를 이용해 함수형 프로그래밍할 수있게 API를 제공해준다. 장점 원본의 데이터에 변경없이 가공할 수있다. 메서드체이닝을 통해 가공이 가능, 코드량을 줄이고 간결하게 표현이 가능하다. 병렬처리가 가능하다, 쓰레드를 이용해 많은 요소를 빠르게처리 가능 단점 함수형 프로그래밍이 너무 많아지면, 다수의 개발자가 운영 및 관리에 어려움이 따를수 있음(함수형 프로그래밍은 자바 표준 개발 방식이 아니라 익숙하지 않은 개발자들이 존재할수 있음) 생성하기 배열 / 컬렉션 / 빈 스트림 Stream.builder() / Stream.generate() / Stream.it..
옵저버 패턴은 간단하게 얘기하면, 어떤 객체의 상태가 변할 때 그와 연관된 객체 들에게 알림을 보내는 디자인 패턴이다. 쉽게 얘기하면, Badi의 상태가 변할때 마다 notifyCrew를 호출, 해당 크루는 객체에서 가지고 있는 Crew원의 리스트를 업데이트 해준다. 메인에서는 배디를 크루원들이 구독하여, 구독자와 발행자의 관게를 맺게 된다. 주로 분산/이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하고 발행자의 상태가 변경되면 구독자들에게 해당 값을 전파하는 방식이다. 옵저버 패턴은 한 객체의 상태가 바뀌면, 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의한다. 단, 설계는 느슨한 결합으로 하는 것이 좋다. 두 객체..
팩토리 패턴 : 간접적으로 객체를 생성해준 후에 반환해주는 역할이다. * 장점 생성할 클래스를 미리 알지 못해도 팩토리 클래스가 객체 생성 담당한다. 객체의 자료형이 하위클래스에 의해서 결정 -> 확장 용이성 동일한 형태로 프로그래밍 가능 확장성 있는 전체 프로젝트 구성가능 * 단점 객체가 늘어날때 마다 하위클래스 재정의로 인한 불필요한 많은 클래스 생성 가능 쉽게 말하면 하나의 인터페이스를 여러 클래스가 상속 받는 다고 가정하자 shape interface를 여러 객체가 상속을 받는다면 해당 클래스로 하게되면 하나의 호출로, 여러개의 객체 호출을 할수 있다. 관련 클래스 다이어 그램이다. 하나의 인터페이스를 여러개의 클래스에서 받아서 객체생성은 팩토리에서 전담 하는 것이다. 마무리 장점 * 객체 생성하..
롬복의 동작원리는 간단히, 컴파일 시점에 바이트 코드를 변환하여 원하는 부분을 주입해주는 방식이다. 과정으로 자세히는 1. 자바 컴파일러는 소스파일을 파싱하여 AST트리를 만든다. 2. Lombok은 AnnotationProcessor에 따라 AST 트리를 동적으로 수정, 새노드를 추가하고 마지막으로 바이트 코드를 분석 및 생성한다. 3. 최종적으로 자바 컴파일러는 Lombok Annotation Processor에 의해 수정된 AST를 기반으로 Byte Code를 생성한다. Annotation Processor Lombok의 의존성을 추가할때 해당 키워드란, 자바 플러그 인의 일종으로, 어노테이션에 대한 코드베이스를 검사, 수정 생성하는 훅이다. 컴파일 에러나, 경고를 내기도하고 소스코드와 바이트코드를..
Enum이란? 기존 상수를 표현할때는 해당 클래스 내부에 final static String, final static int 와 같이 정의했으나 가독성의 문제로 인해 Enum이 등장하였다. Enum은 Enumeration으로 열거형이라고 불리고, 연관된 상수들의 집합을의미한다. Enum클래스는 컴파일 시점에 모든 값에 대해 알아야하고, 고정된 상수들의 집합이여야 한다. 또한 다른 패키지나 클래스에서 해당 타입에 접근해서 동적으로 어떤 값을 정해줄 수 없다. 또한 클래스로 정의를 하기 때문에 정해진 값에 대한 신뢰있는 메소드를 사용하여, 값을 재조정 및 얻어서 사용할 수 있다. ex. MyEnum.toString() -> 별도 오버라이딩 등등
싱글턴 패턴이란 -전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조 할 수 있도록 하는 패턴 하나의 인스턴스만 생성하여, 모든 클라이언트들에게 동일한 인스턴스를 반환한다. 생성자를 private으로 하고, 클라이언트에서는 해당 생성된 인스턴스를 사용하여 처리한다. 다중 스레드에서 Printer클래스를 이용할때 인스턴스 1개 이상 생성되는 경우가 발생할 수 있다. 경합 조건에서 두개의 쓰레드가 null을 체크후에 진행이 된다면, 동시에 두개의 인스턴스가 생성이 될 수도 있다. 1) static 변수로 인스턴스를 만들어서, 초기화 하는 방법 static 변수 객체가 생성되기 전 클래스가 메모리에 로딩될때 만들어져서 초기화가 한번만 실행된다. 메소드 영역에 메모리가 ..
리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드와 타입 그리고 변수들을 접근 할수 있도록 해주는 자바 API 이다. 런타임에 지금 실행되고 있는 클래스를 가져와서 실행해야하는 경우 동적으로 객체를 생성하고 메소를 호출하는 방법 클래스,인터페이스,메소드 들을 찾을 수 있고, 객체를 생성하거나 변수를 변경하거나 메소드를 호출할 수 있다. -컴파일 타임 타입검사가 주는 이점을 누릴수 없다. -리플렉션을 이용하면 코드가 장황해지고 지저분해진다. -성능이 떨어진다. (리플렉션을 통한 메서드 호출은 일반 메서드 호출보다 훨씬 느리다.) 쉽게말하면, 특수한 시스템을 만들때는 강력하나, 컴파일 타임에서 명확한 객체를 사용하지 못해 독이 될수 있다. 따라서 되도록이면 인스턴스 생성에만 리플렉션을 쓰고..
-각 노드가 데이터와 포인터를 가지고 한줄로 연결되어있는 방식이다. -노드의 포인트가 이전 노드,다음노드에 대한 정보를 가지고있고, 연결을 담당한다. -삭제,추가에 대해서 빠르다 -검색에 대해서는 순차 탐색을 해야하기때문에 느리다.(인덱스가 없다)