Java(28)
-
Java Parallel Stream(병렬 스트림)
Parallel Stream(병렬 스트림) 회사 코드 리뷰를 하던 중 팀원이 parallel stream을 사용하신 것을 봤습니다. 문서를 보니 여러 스레드를 병렬로 실행해 성능이 높아지는 원리라고 인지했습니다. 그리고 나서 foreach문에 적용해봤는데 성능이 약 5배 가까이 좋아지는 것을 보고 동작 원리를 자세히 알아보았습니다. 본 글의 주된 내용은 참고자료 링크에 표기된 oracle 사 Java Magazine을 참고했습니다. Stream의 두 종류 sequential stream : 싱글 스레드를 사용해 element를 순차적으로 처리. 싱글 코어 CPU 사용. parallel stream : stream을 여러 substream으로 나눠 처리. 멀티 스레드를 사용해 stream 파이프 라인을 실..
2023.05.28 -
[HTTP강의] HTTP 캐시
본 글은 인프런 김영한님 강의를 정리한 글입니다. 자세한 강의내용은 강의를 통해 들어보시길 추천드립니다. 캐시란 캐시는 서버에 요청하지 않고 캐시 저장소에서 데이터를 꺼내 쓸 수 있기 때문에 네트워크 통신 비용을 아끼고 빠른 속도로 사용자에게 서비스를 제공할 수 있습니다. 캐시가 만료되었을 때 어떤 대안이 있는지도 알아두면 좋을 것 같습니다. 캐시적용 cache-control을 헤더에 넣어 캐시를 설정할 수 있습니다. 주요 옵션은 max-age(초 단위로 만료기간 설정)이 있습니다. 검증헤더와 조건부 요청 만약 캐시의 유효기간이 만료되었다면 어떻게 해야 할까요? 서버에 요청을 해서 다시 그 데이터를 받아와야 할 것입니다. 하지만 변경이 적은 이미지 데이터의 경우 그럴때마다 다시 데이터를 다운로드 받기엔 ..
2022.05.26 -
[SOLID] 인터페이스 분리 원칙(Interface segregation principle)
인터페이스 분리 원칙(Interface segregation principle) 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다. 예를 들어, ArticleWriteService, ArticleListService, ArticleDeleteService가 각각 상위클래스를 가진다면 ArticleService 하나가 아닌 각각의 상위클래스를 가져서 ISP에 부합하는 패턴입니다. 출처: 개발자가 반드시 정복해야 할 객체 지향과 디자인 패턴 - 최범균 저
2022.05.25 -
[SOLID] 리스코프 치환 원칙(Liskov substitution principle)
리스코프 치환 원칙(Liskov substitution principle) OCP를 받쳐 주는 다형성에 관한 원칙을 제공합니다. LSP는 다음과 같습니다. 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 작동해야 한다. public void someMethod(SuperClass sc) { sc.someMethod(); } SuperClass의 someMethod()에 하위 타입의 객체를 전달해도 정상적으로 동작해야 한다는 것이 LSP 입니다. someMethod( new SubClass() ); 코드로 예를 들어보면, Coupon 클래스에서 Item을 파라미터로 받아 할인 금액(할인율 * 가격)을 반환하는 메서드가 있습니다. 이 때 구현클래스 할인이 안되는 아..
2022.05.25 -
[SOLID] 개방 폐쇄 원칙(Open-closed principle)
개방 폐쇄 원칙(Open-closed principle) 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 합니다. 풀어 보면 다음과 같습니다. 기능을 변경하거나 확장할 수 있으면서 그 기능을 사용하는 코드는 수정하지 않는다. FlowController(사용하는 코드)에서 ByteSource(interface)를 사용한다면, 메모리에서 byte를 읽어 오는 기능을 추가해야 할 때 MemoryByteSource클래스를 구현해서 FlowController의 코드를 수정하지 않고 기능을 추가할 수 있습니다. 즉, 확장되는 부분을 ByteSource로 추상화했기 때문에 확장에는 열려있고 (기능을 사용하는 코드의) 변경에는 닫혀 있다고 표현한 것입니다. 개방 폐쇄 원칙이 깨질 대의 주요 증상 추상화와 다형성이 O..
2022.05.25 -
[Java] Java Compiler가 어떻게 동작하는지?
Compile이란 소스코드가 컴퓨터가 인지할 수 있는 기계 언어로 번역해주는 과정을 말합니다. Javac Java에선 javac 컴파일러가 첫번째로 소스코드를 바이트 코드로 컴파일 시켜줍니다. 그런 다음 JVM이 바이트 코드를 해석하고 실행시킵니다. 그 과정에서 syntax error(자바 문법 오류)도 발견합니다. Javac 작동원리 소스코드가 컴파일 되면 Java 바이트코드를 생성하고 자동적으로 메모리에 .class 파일로 저장됩니다. 이 파일은 기반되는 OS 위에서, JVM에 의해 해석 및 실행됩니다. 참고자료 baeldung - How compilers Work sciencetecheasy - What is Java Compiler
2022.05.16