추상화 된 빈 설정 메타 정보 BeanDefinition(빈 정의) 스프링 XML, JAVA 코드, Groovy 등의 다양한 설정 형식을 지원합니다. 이렇게 다양한 설정을 지원할 수 있는 이유는 "BeanDefinition" 이라는 추상화가 있기에 가능합니다. XML을 읽어서 -> BeanDefinition 자바 코드를 읽어서 -> BeanDefinition Groovy 코드를 읽어서 -> BeanDefinition 스프링 컨테이너는 JAVA 코드인지, XML인지 몰라도 됩니다, 오직 BeanDefintion 만 알면 됩니다. 스프링 컨테이너는 이 BeanDefintion 즉 빈 설정 메타정보를 기반으로 스프링 빈을 생성합니다.
java로 elasticsearch를 사용하는 중 쿼리 만들기가 너무 빡세(?) 룸북의 @Getter @Setter 어노테이션과 같이 컴파일 타임에서 자동으로 쿼리를 만들어주는 라이브러리를 만들어보려고 조사하다보니 AST라는 생소한 단어를 접하게되어 이것이 무엇인지 찾아 보았습니다. 추상 구문 트리(abstract syntax tree) 추상 구문 트리(abstract syntax tree) 줄여서 AST 라고 쉽게 부르며, java에서만 볼 수 있는 용어가 아닌 컴파일러가 필요한 프로그래밍 언어라면 들을 수 있는 용어입니다 컴파일러와의 관계 컴파일러가 필요한 언어에서 AST를 접할 수 있는 이유는 AST가 컴파일 단계 중 구문 분석(syntax analyzing) 단계의 결과물이기 때문입니다. 컴파일 ..
SOLID SOLID 란 객체지향 설계의 5원칙이라고 하며, 앞글자를 따서 SOLID라고 합니다. 원칙은 아래과 같습니다. SPR(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open Closed Principle) : 개방 폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 DIP(Dependency Inversion Principle) : 의존 역전 원칙 모두 중요하지만 특히 OCP, DIP 가 중요하다 OCP(Open Closed Principle) : 개방 폐쇄 원칙 쉽게 말해 서버를 바꿨다고 클라이언트 소스도 바꿀 필요가..
토비의 Spring을 정독하고 싶었습니다만.. 업무가 바빠지며 출퇴근 시간 말고는 자유의 몸이 아니게되어 인프런을 통하여 김영한님의 강의를 구독하였습니다. 선물받은 레노버p11과 함께 출퇴근 시간을 적극 활용하여 완강을 목표합니다. 좋은 객체 지향 프로그래밍? 객체 지향 프로그래밍은 코드를 유연하고, 변경이 용이하게 만들어야 합니다. 쉽게 말해 아래와 같이 코드를 작성해야한다는 것 입니다. 레고 블럭을 조립하듯이 키보드, 마우스 갈아 끼우듯이 컴퓨터 부품 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법 객체 지향의 특징 객체 지향의 큰 특징은 아래와 같이 네가지가 존재합니다. 추상화 캡슐화 상속 다형성 이중 객체 지향의 꽃이라 할 수 있는 다형성에 대하여 살펴보겠습니다. 다형성 다..
Log4j에 들어와서 Lockup 플러그인에 JNDI 파서가 추가되었는데 이 JNDI 파서를 통한 원격 코드 실행(RCE -Remote Code Execution) 취약점이 발견되어 전 세계적으로 큰 이슈가 되었습니다. 해당되는 Log4J의 버전으로는 2.0-beta9 ~ 2.15 가 포함되며 제가 사용하던 Elasticsearch 7.8.1 버전에서 Log4j 2.11.1 을 사용중이기에 해당 이슈에 영향을 받을 것 으로 판단되어 조치한 내용을 기록합니다. Elasticsearch 어떤 버전이 이슈에 포함될까? 이번 이슈는 글로벌한 이슈이기에 Elasticsaerch에서도 공식적인 가이드를 빨리 발표하였습니다. 링크 : https://discuss.elastic.co/t/apache-log4j2-rem..
1 장 : 오브젝트와 의존관계 템플릿 메소드 패턴 템플릿 메소드 패턴이란 슈퍼 클래스에 기본적인 로직의 흐름 (커넥션 가져오기, SQL생성, 실행, 반환)을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤 서브클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법 Ex public abstract class UserDao { public void add(User user) { Connection c = get Connection(); // 생략... } public abstract Connection getConnection(); } 팩토리 메소드 패턴 위 UserDAO 클래스에서 getConnection()메소드는 Connection 객..
회사에 요청하여 구매한 토비의 Spring 3.1 책을 드디어 읽게되었습니다. Note에 공부 내용을 정리하고 이를 언제든지 꺼내볼 수 있도록 블로그에 옮겨 적습니다. 0 장 : 들어가며.. 애플리케이션의 기본틀 스프링 컨테이너 스링 컨테이너는 스프링 런타임 엔진이며, 설정 정보를 참고해서 Application 을 구성하는 오브젝트를 생성하고 관리한다. 공통 프로그래밍 모델 IoC/DI IoC/DI는 오브젝트의 생명주기와 의존관계에 대한 프로그래밍 모델, 스프링이 직접 제공하는 모든 기술과 API, 심지어 컨테이너도 IoC/DI 방식으로 작성되어 있다. 스프링을 바르게 이해하고 효율적으로 사용하는데 기본이되는 가장 중요한 기술! 서비스 추상화 구체적인 기술과 환경에 종속되지 않도록 유연한 추상계층을 두는..
최근 대부분의 언어들이 함수형 프로그래밍을 지원하게 되면서 람다식을 사용할 수 있게 되었습니다. 이 람다식은 언어마다 약간은 다르지만 화살표 를 기준으로 좌,우 의 구조가 정해져 있다는 것은 똑같습니다. 구체적인 각 언어별 람다식의 구조는 아래와 같습니다. // C++ std::function lambda_func = [](int a, int b) -> int{ return a - b; }; int result = lambda_func(20, 10);// JS let lambdaFunc = (a,b) => { a - b }; let result = lambdaFunc(20, 10);// JAVA // java 람다를 표현하기 위해서 인터페이스가 있어야하지만 코드가 길어지기에 생략합니다 MyLambdaFu..
- Total
- Today
- Yesterday
- rotator
- C
- 람다
- UE5
- double free
- UE4
- coordinate system
- c++
- Trouble shooting
- bug
- 람다함수
- unrealengine
- c++11
- Lambda
- LambdaFunction
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |