전체 글 405

추상 팩토리 패턴

추상 팩토리 패턴 tags: Tag(GoF디자인 패턴) 서로 관련있는 여러 객체를 만들어주는 인터페이스 이걸 사용하면 어떤 클래스의 인스턴스를 사용하는지 감출 수 있다. 그래서 팩토리 메서드랑은 뭐가 다른데? 하면 사실 내부 구조는 거의 비슷한데 얘는 Client에서 정보를 숨기는데에 집중한다. (이거 후술) 해당 로직을 구현하는 Client에서 구체적인 class를 사용하는 대신, 추상화된 메서드를 통해 구현하도록 하는 것이다. 추상 팩토리 패턴 세팅 추상적인 interface를 만들어준다. -> 추상 Factory 패턴 public interface ShipPartsFactory { Anchor createAnchor(); Wheel createWheel(); }그리고 저기 Anchor, Wheel도..

이론 정리/java 2022.12.13

팩토리 메소드 패턴

펙토리 메소드 패턴 tags: Tag(GoF디자인 패턴) 구체적으로 어떤 인스턴스를 만들지는 서브 클래스가 정한다. 그니까 그 껍데기를 추상적인 Interface 껍데기로 감싸는 것이다. Factory역할을 할 interface를 만들어준다. 이 interface내의 추상화 메소드를 하위 클래스에서 구체적으로 만들어준다. 그리고 이거의 결과로 나오는것도 문제 상황 public class Client { public static void main(String[] args) { Client client = new Client(); Ship whiteship = ShipFactory.orderShip("WhiteShip", "fbcks97@naver.com"); Ship blackShip = ShipFacto..

이론 정리/java 2022.12.12

협업 전략

Gitlab Issue 및 kanban Gitlab에서 Issue를 통해 작업 현황 및 내역 공유 issue - Boards에서 kanban과 같은 형식으로 Issue 생성 및 관리 가능 Issue발행 Issue를 통해 프로젝트 관련 문의와 진행 사항 공유 가능 Issue에서는 Milestone 진행 예정 목표 기입 하나의 마일스톤은 여러 이슈를 가질 수 있다. Labels 해당 Issue의 목적 필요에 따라 Labels 생성 가능 등의 여러 특성을 활용해 사용 가능 Issue Template 이슈의 내용은 필요에 따라 사용 가능하며 해당 프로젝트의 메인 브런치에서 .gatlab/issue_templates 를 통해 미리 convention을 정의한 Template 작성이 가능하다. issue_templ..

기타 2022.12.08

local VM에 fluent 구성하기!

local VM에 fluent 구성하기! 사전 준비 먼저 fluent 설치 이전에 ruby(3.0이상)과 bundler를 설치해야 한다. 밑준비 1. Ruby와 Passenger빌드에 필요한 헤더파일 설치 yum install openssl-devel readline-devel zlib-devel curl libyaml-devel2. Apache 설치 yum install httpd httpd-devel3. ImageMagick 설치 yum install ImageMagick ImageMagick-develruby 설치 1. local 위치로 들어가기 cd /usr/local2. 루비 tar파일 가져오기 wget http://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.0...

싱글톤 패턴

싱글톤 패턴 인스턴스를 오직 한개만 제공하는 클래스 인스턴스를 오직 한개만 만들 수 있어야 한다. 그렇게 만들어진 하나의 인스턴스에 글로벌하게 접근할 수 있어야 한다. 이제 설정이나 그런것들은 싱글톤으로 해주면 될것이다. private Settings() {} private static Settings instance; public static Settings getInstance() { return instance } 이렇게 해주면 instance를 필요할 때에 getInstance를 호출해서 만들어 줄 것이다. 근데 싱글톤은 하나의 인스턴스만을 가질수 있다고 했다. 어떻게 이 싱글톤 패턴을 구현해 줄까? 1. private 생성자에 static메소드를 사용해서 싱글톤 구현 private Setting..

이론 정리/java 2022.12.06

java의 volatile

java의 volatile java변수를 Main Memory에 저장하겠다는 것이다. 이게 뭐냐...하면 말그대로 main memory에 값을 저장한다는거다. 사실 이거 이해하려면 cache에 대해서 조금 알고오면 편하다. 자바는 사실 값을 저장하거나 읽어올 때에 이거를 CPU cache를 통해 진행한다. 이렇게 되면 속도에 이득이 필요하지만... 멀티 쓰레드 환경에서 좀 문제가 있을 수 있다. 멀티 쓰레드에서의 CPU cache 문제 MultiThread에서는 보통 Task동안 Main Memory에 있는 값을 CPU에 Caching한다. 그리고 이거를 읽거나, 쓰거나 등등의 연산을 취하게 되는데 Main Memory에 특정 값이 저장되어 있다. (RyooChan = "Genius") 1번 쓰레드가 M..

이론 정리/java 2022.12.06

네트워크 입문 002

study002 tags: Tag(IT엔지니어를 위한 네트워크 입문) 인터넷이 대중화된 이후 대부분의 기술이 이더넷 - TCP/IP기반이어서 기술이 점점 단순화되고 있지만 아직도 용도와 필요한 네트워크 속도에 따라 기술 요소들이 사용되고 있다. 이번에는 네트워크 연결 방법을 구분하고 네트워크 연결에 필요한 회선과 구성 요소를 알아본다. 네트워크 연결 구분 네트워크는 규모와 관리 범위에 따라 LAN, MAN, WAN 3가지로 구분된다. LAN(Local Area Network) 사용자 내부 네트워크 MAN(Metro Area Network) 한 도시 정도를 연결하고 관리하는 네트워크 WAN(Wide Area Network) 멀리 떨어진 LAN을 연결해주는 네트워크 예전에는 이 3개가 사용하는 기술이 달랐지..

자바에서 public static void가 메인메소드로 시작하는 이유가 뭘까?

요즘 GoLang을 공부중인데 이친구는 main.go에서부터 시작한다. 근데 그러다가 자연스럽게 java는 public static void main(String[] args) 에서부터 시작하는데 그 이유가 뭘까 궁금하여 찾아보게 되었다. package ryoochan; public class RyoochanHandsome { public static void main(String[] args) { } }처음에 프로젝트를 시작하면 이렇게 초기 코드가 생성된다. 그래서 이게 뭔데....? 싶을 것이다. 내가 그랬음. 일단 하나씩 까보자 public 이거는 뭐 다들 알것이다. Spring으로 개발을 해봤으면 알텐데 접근 제어자중 하나이다 접근 제어자는 private -> protected -> public ..

이론 정리/java 2022.11.06

캐시 교체 정책에 관해서

Cache가 뭔데? 왜 하는데? 데이터나 값을 미리 저장해 두는 임시 장소이다. 굳이 이걸 미리 저장해 두는 이유는, 동일한 계산의 결과값이 필요할 때에 추가적인 결과 없이 미리 캐싱해둔 데이터들을 가져오면 더 빠르게 가져올 수 있고 어플리케이션에 부하가 덜 걸리기 때문이다. 캐시 교체 알고리즘 FIFO(First In First Out) 선입선출 - 먼저 입력된 캐시 순서대로 교체된다. LFU(Least Frequently Used) 사용 횟수가 가장 적은 캐시를 교체한다. LRU(Least Recently Used) 가장 오랫동안 사용되지 않은 캐시를 교체한다. LRU 알고리즘에 대해서 나머지는 대충 어떤 방식인지 알겠고, 딱봐도 잘 안쓰일것같다. 단점을 보면 FIFO 많이 쓰이는 데이터가 먼저 들어..

이론 정리 2022.11.06

DTO랑 VO의 차이

근데 진짜 DTO랑 VO이거 개발할때 잘 구분 안함... DTO Data Transfer Object 데이터를 전달하기 위해 사용하는 객체이다. 데이터를 주고받을 때에 사용하는 녀석이라 생각하면 편하다. 구체적으로 표현하자면 "계층 간" 데이터 전달을 위해 사용되는 것이 DTO이다. 예를 들어 Controller Service 와 같이 서로 다른 계층 간에 데이터를 전달할 때에 쓰인다. 이 DTO의 특징으로는 오직 getter/setter메서드만을 가진다. 찐으로 getter/setter만 갖는게 아니라 데이터 세팅이랑 읽는것만 가능하다는거다. setter는 어지간하면 쓰지 말자구요 걍 불변객체 가자 로직을 갖지 않는다. 왜냐면 얘는 데이터 전달만을 위한 객체이기 때문이다. VO Value Object ..

카테고리 없음 2022.11.01