IT자료실 37

PF4J에서 Plugin을 상속 받는 이유

Overview플러그인 환경을 구축할 일이 있어 PF4J 라이브러리를 사용하던 도중 고민하게 만드는 에러가 생겼다, 관련 에러에 대해 알아보자기존 설정파일구조├─src│ ├─main│ │ ├─java│ │ │ └─com.plugin.test│ │ │ └─UserExtension.java│ │ │ └─mapper│ │ │ └─UserMapper.java│ │ └─resources│ │ └─plugin.properties​plugin.propertiesplugin.id=EntryPointPlugin2plugin.class=com.plugin.test.UserExtensionplugin.version=1.0.0plugin.requires=pf4j>..

Netty Bytebuf

Overview네티를 공부하면서 ByteBuf가 핵심 클래스 중 하나로 생각된다. ByteBuf에 대해 더 알아보자.What is Buffer?ByteBuf를 알아보기 전에 Buffer란 무엇인지 먼저 알아보자.Buffer는 중간 저장소의 역할이다. 데이터를 생성 할 때 버퍼에 넣어두고, 데이터를 사용하는 곳은 처리 가능한 속도로 항목을 가져온다. 데이터 처리 속도가 데이터 생성 속도보다 느려도, 공급된 데이터를 버퍼에 쌓아두기 때문에 끊김 없이 사용할 수 있다.버퍼의 유용한 점이 이것이다. 데이터 생성 속도와 데이터 처리 속도가 다를 때 유용하다.What is ByteBuf?ByteBuf는 논리적인 바이트 컨테이너이다.Java NIO는 바이트 컨테이너로 ByteBuffer를 제공하지만, 사용하기에 번거..

log4j → log4j2 Migration 작업

Overviewlog4j는 2015년에 종료 되었고 보안에 취약한 문제가 발견되어 log4j2로 migration하는 작업이 필요하다.log4j 란?log4j란 log for java라는 의미이다.로그문 출력을 다양한 대상으로 할 수 있도록 도와주는 도구이다.log4j의 구조Logger : 로그파일을 작성하는 클래스, Appender에 메세지 전달Appender : 로그출력 위치를 결정 (file, console, DB 등)Layout : Appender로 로그 생성 전에 메세지 형식을 만드는 클래스log4j levelTRACE log4j download 및 방법 차이우선 아래 사이트에서 log4j 파일을 다운로드 한다. Log4j – Download Apache Log4j™ 2logging.apache..

IT자료실/Java 2024.05.08

오브젝트 - 기술서적 스터디 15단원-디자인패턴과 프레임워크

디자인패턴과 프레임워크 디자인패턴 : 소프트웨어 설계에서 반복적으로 발생하는 문제에 대해 반복적으로 적용할 수 있는 해결 방법 (설계를 재사용) 프레임워크 : 설계와 코드를 함께 재사용하기 위한 것 소프트웨어 패턴 패턴이 지닌 가장 큰 가치는 경험을 통해 축적된 실무지식을 효과적으로 요약하고 전달할 수 있는 것 패턴의 종류 : 패턴의 범위나 적용단계에 따라 분류한다 아키텍쳐 패턴 : 디자인패턴의 상위 패턴으로 소프트웨어의 전체적인 구조를 결정 분석 패턴 : 도메안 내의 개념적인 문제를 해결하는 데 초점 디자인 패턴 : 중간 규모의 패턴, 특정한 설계 문제를 해결하는 것을 목적 이디엄 : 특정 프로그래밍 언어에만 국한된 하위 레벨의 패턴 패턴에서 중요한 것은 패턴을 따르면 특정한 상황에 적용할 수 있는 설..

오브젝트 - 기술서적 스터디 14단원-일관성 있는 협력

일관성 있는 협력 객체는 협력을 위해 존재한다. 협력은 객체가 존재하는 이유와 문맥을 제공 갹체지행 패러다임의 장점은 설계를 재사용할 수 있다는 것 구현 유사한 기능은 유사한 방식으로 구현해야 한다 설계에 일관성 부여하기 설계의 일관성을 유지하려면 디자인 패턴을 학습하고 변경이라는 문맥안에서 디자인패턴을 적용한다 협력을 일관성 있게 만들기 위한 기본 지침 변하는 개념을 변하지 않는 개념으로부터 분리 변하는 개념을 캡슐화하라 캡슐화 단순히 테이터를 감추는 것이 아니라 소프트웨어 안에서 변할 수 있는 어떤 개념이라도 감추는 것 서브타입 캡슐화와 객체 캡슐화를 적용하는 법 변하는 부분을 분리해서 타입 계층을 만든다 변하지 않는 부분의 일부로 타입 계층을 합성한다 패턴을 찾아라 일관성 있는 협력의 핵심은 변경을..

오브젝트 - 기술서적 스터디 13단원-서브클래싱과 서브타이핑

타입 개념 관점의 타입 : 우리가 인지하는 세사의 사물의 종류 어떤 대상이 타입으로 분류 될 때 그 대상을 인스턴스라고 부른다(일반적으로 타입의 인스턴스를 객체라고 부른다) 프로그래밍 언어 관점의 타입 : 비트의 묶음에 의미를 부여하기 위해 정의된 제약과 규칙 타입에 수행됟 수 있는 유효한 오퍼레이션의 집합을 정의 타입에 수행되는 오퍼레이션에 대해 미리 약속된 문맥을 제공 객체지향 페러다임 관점의 타입 : 객체가 수신할 수 있는 메시지의 종류를 정의하는 것 타입 계층 타입 계층을 구성하는 두 타입 간의 관계에서 더 일반적인 타입을 슈퍼타입 더 특수한 타입을 서브타입이라 부른다 슈퍼 타입 집합이 다른 집합의 모든 멤버를 포함 타입 정의가 다른 타입보다 좀 더 일반적 서브타입 집합에 포함되는 인스턴스들이 더..

오브젝트 - 기술서적 스터디 12단원-다형성

다형성 상속의 목적은 코드재사용이 아니다. 상속은 타입 계층을 구조화 하기 위해 사용 상속의 메커니즘 업캐스팅 : 부모클래스타입으로 선언된 변수에 자식 클래스의 인스턴스를 할당하는 것이 가능 동적 바인딩 : 선언된 변수의 타입이 아니라 메시지를 수신하는 객체의 타입에 따라 실행되는 메서드가 결정, 이것은 객체지향 시스템이 메시지를 처리할 적절한 메서드를 컴파일 시점이 아니라 실행 시점에 결정하기 떄문 동적 메서드 탐색과 다형성 메시지를 수신한 객체는 먼저 자신을 생성한 클래스에 적합한 메서드가 존재한는지 검사한다, 존재할 경우 메서드를 실행하고 탐색을 종료한다 메서드를 찾지 못했다면 부모 클래스에서 메서드 탐색을 계속한다, 적합한 메서드를 찾을 때 까지 상속 계층을 따라 올라가며 계속된다 상속 계층의 가..

오브젝트 - 기술서적 스터디 11단원-합성과 유연한 설계

상속과 합성 상속과 합성은 코드 재사용이라는 동일한 목적을 가진다는 점을 제외하면 구현 방법부터 변경을 다루는 방식까지 모든 면에서 차이를 보인다. 상속은 is-a 관계라고 부르고, 합성관계는 has-a 관계라고 부른다. 재사용의 대상이 다른 상속과 합성 상속 : 부모 클래스 안에 구현된 코드 자체를 재사용 (화이트박스 재사용) 합성 : 포함되는 객체의 퍼블릭 인터페이스를 재사용 (블랙박스 재사용) 상속을 남용했을 때 직면할 수 있는 문제점 불필요한 인터페이스 상속 문제 메서드 오버라이딩의 오작용 문제 부모 클래스와 자식 클래스의 동시 수정 문제 몽키패치 현재 실행 중인 환경에만 영향을 미치도록 지역적으로 코드를 수정하거나 확장하는 것을 가리킨다. 자바에서는 바이트코드를 직접 변환하거나 AOP를 이용하여..

오브젝트 - 기술서적 스터디 10단원-상속과 코드의 재사용

상속을 사용한 중복코드 제거 상속을 사용해 중복코드를 제거할 수 있지만 결합도가 올라가는 문제가 생긴다. 자식 클래스 안에서 super 참조를 이용해 부모 클래스의 메서드를 직접 호출할 경우 두 클래스는 강하게 결합 취약한 기반 클래스 문제 취약한 기반 클래스 : 부모클래스의 변경에 의해 자식 클래스가 영향을 받는 현상 객체지향 프로그래밍의 취약점 불필요한 인터페이스 상속 문제 상속받은 부모 클래스의 메서드가 자식 클래스의 내부 구조에 대한 규칙을 깨트릴 수 있다메서드 오버라이딩의 오작용 문제 자식 클래스가 부모클래스의 메서드를 오버라이딩할 경우 부모 클래스가 자신의 메서드를 사용하는 방법에 자식클래스가 결합될 수 있다부모클래스와 자식클래스의 동시 수정 문제 클래스를 상속하면 결합도로 인해 자식 클래스와..

오브젝트 - 기술서적 스터디 9단원-유연한 설계

유연한 설계 개방-폐쇄 원칙 확장에 대해 열려 있다. 애플리케이션의 요구사항이 변경될 때 이 변경에 맞게 새로운 '동작'을 추가해서 애플리케이션의 기능을 확장할 수 있다. 수정에 대해 닫혀 있다. 기존의 '코드'를 수정하지 않고도 애플리케이션의 동작을 추가하거나 변경할 수 있다. 생성과 사용 분리 표현적 분해 도메인에 존재하는 사물 또는 개념을 표현하는 객체들을 이용해 시스템을 분해하는 것이다. 도메인 모델에 담겨 있는 개념과 관계를 따르며 도메인과 소프트웨어 사이의 표현적 차이를 최소하는 것을 목적으로 한다. 행위적 분해 도메인 개념을 표현한 객체가 아닌 설계자가 편의를 위해 임의로 만든 객체를 이용해 시스템을 분해하는 것이다. 의존성 주입 생성자 주입(constructor injection) : 객체..