인파

You Can Become A

늦게 시작해도 누구든지 노력하면 개발자가 될수 있어요 !

공부한 내용을 정리합니다
자료구조

🧱 Java Collections Framework 종류 💯 총정리

Java Collection Framework 자바 새내기분들은 컬렉션 프레임워크라는 단어에 뭔가 거창하고 어려운 느낌이 들수 있겠지만, 그냥 자료 구조(Data Structure) 종류의 형태들을 자바 클래스로 구현한 모음집 이라고 보면 된다. 예를들어 C언어에서 LinkedList 라는 자료구조를 사용하려면 직접 구현해야 되지만 자바 개발자는 그냥 인스턴스화만 하면 사용이 가능하다. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이 Java Collectoin Framework(JCF)이다. 물론 자바도 직접 자료 구조 클래스를 만들어 사용할 수는 있겠지만, 알고리즘의 속도와 안정성에 있어 자바 언어 개발진들이 수십년에 걸쳐 JVM(자바 가상 머신)..

category_image
인파_
2023.01.30
(0)
IDE/IntelliJ

💽 IntelliJ - Lombok 설치 방법 & 오류 해결

인텔리제이 Lombok 설치 방법 롬복(Lombok)은 자바 클래스에서 반복적으로 작성되는 getter, setter, toString, 생성자 코드 등의 소스들을, 어노테이션(Annotation)을 사용하여 생략할 수 있도록 컴파일 시점에 자동으로 생성해주는 라이브러리이다. @Getter @Setter @ToString public class Store extends Common { private String companyName; // 상호명 private String industryTypeCode; // 업종코드 private String businessCodeName; // 업태명 private String industryName; // 업종명(종목명) private String telephone..

category_image
인파_
2023.01.29
(0)
IDE/IntelliJ

💽 IntelliJ - 외부 jar 라이브러리 간단 추가하기

인텔리제이 자바 라이브러리 추가 방법 현재 자바 프로젝트에 쓰일 외부 라이브러리를 인텔리제이 IDE를 통해 추가하는 방법이다. 1. 파일(File) → 프로젝트 구조(Project Structure) 2. 모듈(Modules) → 자바 프로젝트 클릭 → 종속 요소(Dependencies) → + 버튼 클릭 → JARs or directories 3. 추가할 JAR 라이브러리를 디스크에서 선택 4. 확인 버튼을 눌러 적용 완료

category_image
인파_
2023.01.28
(0)
디자인 패턴/GOF

💠 옵저버(Observer) 패턴 - 완벽 마스터하기

Observer Pattern 옵저버 패턴(Observer Pattern)은 옵저버(관찰자)들이 관찰하고 있는 대상자의 상태가 변화가 있을 때마다 대상자는 직접 목록의 각 관찰자들에게 통지하고, 관찰자들은 알림을 받아 조치를 취하는 행동 패턴이다. 옵저버 패턴은 여타 다른 디자인 패턴들과 다르게 일대다(one-to-many) 의존성을 가지는데, 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. Pub/Sub(발행/구독) 모델로도 알려져 있기도 하다. 이 패턴을 이해하는데 있어 뉴스 피드나 유튜브로 비유해보면 쉽다. 유튜브 채널은 발행자(Subject)가 되고 구독자들은 관찰자(Observer)가 되는 구조로 보면 된다. 실제로 유튜버가 영상을 올리면 여러명의 구독자들은 모두 영상이 올라왔다는 알림..

category_image
인파_
2023.01.27
(0)
디자인 패턴/GOF

💠 데코레이터(Decorator) 패턴 - 완벽 마스터하기

Decorator Pattern 데코레이터 패턴(Decorator Pattern)은 대상 객체에 대한 기능 확장이나 변경이 필요할때 객체의 결합을 통해 서브클래싱 대신 쓸수 있는 유연한 대안 구조 패턴이다. Decorator을 해석하자면 '장식자' 라는 의미를 가지고 있는데, 마치 기본 제품에 포장지나 외부 디자인을 살짝 변경해 줌으로써 새로운 기능을 부여하는 것과 같이, 객체 지향 프로그래밍에서 원본 객체에 대해서 무언가를 장식하여 더 멋진 기능을 가지게 만드는 것이기 때문에 이 명칭이 붙었다고 보면 된다. 데코레이터 패턴을 이용하면 필요한 추가 기능의 조합을 런타임에서 동적으로 생성할 수 있다. 데코레이터할 대상 객체를 새로운 행동들을 포함한 특수 장식자 객체에 넣어서 행동들을 해당 장식자 객체마다 ..

category_image
인파_
2023.01.26
(0)
디자인 패턴/GOF

💠 어댑터(Adaptor) 패턴 - 완벽 마스터하기

Adaptor Pattern 어댑터 패턴(Adaptor Pattern) 이란 이름 그대로 클래스를 어댑터로서 사용되는 구조 패턴이다. 어댑터는 우리 주변에도 많이 볼 수 있는 것으로서, 대표적으로 110V 전용 가전제품에 220V 어댑터를 끼워 사용하는 걸 들 수 있다. 즉, 서로 호환이 되지 않은 단자를 어댑터로 호환시켜 작동시키게끔 하는 것이 어댑터의 역할인 것이다. 이를 객체 지향 프로그래밍에 접목해보면, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들을 함께 작동해주도록 변환 역할을 해주는 행동 패턴이라고 보면 된다. 예를들어 기존에 있는 시스템에 새로운 써드파티 라이브러리를 추가하고 싶거나, Legacy 인터페이스를 새로운 인터페이스로 교체하는 경우에 어댑터 패턴을 사용하면 코드의..

category_image
인파_
2023.01.25
(0)
개발 지식/HTTP 지식

🌐 HTTP 3.0 소개 & 통신 기술 알아보기

HTTP / 3.0 HTTP 2.0 의 등장과 함께 기존의 프로토콜 데이터 체계를 프레임과 스트림 개념으로 재구축한 결과 기존 보다 혁신적으로 성능이 향상되게 되었다. 하지만 여전히 HTTP는 TCP 기반 위에서 동작되기 때문에, TCP 자체의 핸드쉐이크 과정에서 발생하는 지연 시간과, 기본적으로 TCP는 패킷이 유실되거나 오류가 있을때 재전송을하는데 이 재전송하는 패킷에 지연이 발생하면 결국 HOLB(Head Of Line Blocking) 문제가 발생되었다. 즉, HTTP 2.0은 TCP/IP 4 계층의 애플리케이션 계층(L4)에서 HTTP의 HOLB를 해결하였지만, 전송 계층(L3)에서의 TCP HOLB 를 해결한건 아니기 때문이다. 애초에 TCP로 인터넷 통신을 하는 것이 발목을 잡은 것이다. 점..

category_image
인파_
2023.01.21
(0)
개발 지식/HTTP 지식

🌐 HTTP 2.0 소개 & 통신 기술 알아보기

HTTP / 2.0 HTTP 2.0은 기존 HTTP 1.1 버전의 성능 향상에 초점을 맞춘 프로토콜이다. 인터넷 프로토콜 표준의 대체가 아닌 확장으로써, HTTP 1.1의 성능 저하 부분과 비효율적인 것들을 개선되어 탄생한 것이 HTTP 2.0라고 생각하면 된다. HTTP 1.1까지는 한번에 하나의 파일만 전송이 가능했다. 비록 파이프라이닝 기술이 있었지만, 여러 파일을 전송할 경우 선행하는 파일의 전송이 늦어지면 HOLB(Head Of Line Blocking)이 발생하였다. 따라서 HTTP 2.0에서는 이 문제를 해결하기 위해 여러 파일을 한번에 병렬로 전송한다. 그래서 일반적으로 HTTP/2를 사용만해도 웹 응답 속도가 HTTP/1/1에 비해 15~50% 향상 된다고 한다. 아래는 동일 이미지를 웹..

category_image
인파_
2023.01.21
(0)
개발 지식/HTTP 지식

🌐 HTTP 0.9 ~ HTTP 1.1 까지 알아보는 통신 기술

HTTP / 0.9 HTTP의 시작은 1989년 팀 버너 리(Tim Berners-LEE)에 의해 제안된 인터넷의 하이퍼 텍스트 시스템이다. 초기 버전인 HTTP/0.9는 매우 단순한 프로토콜이었다. 가능한 메서드는 하이퍼텍스트 문서(html)를 가져오기만 하는 GET 동작이 유일했으며, 헤더(header)도 없어 요청과 응답이 극히 단순 명료 하였다. 또한 상태 코드(status code)도 없었기 때문에 문제가 발생한 경우 특정 html 파일을 오류에 대한 설명과 함께 보내졌다. A very simple HTML page HTTP 0.9 스펙을 요약하면 다음과 같다. TCP/IP 링크 위에서 동작하는 ASCII 프로토콜 Get 메서드만 지원 HTTP 헤더 X, 상태 코드 X 응답도 HTML 파일 자체..

category_image
인파_
2023.01.21
(0)
Language/Java (JVM)

☕ 자바 제네릭 타입 소거 컴파일 과정 알아보기

제네릭 타입 소거 (Erasure) 제네릭은 타입 안정성을 보장하며, 실행시간에 오버헤드가 발생하지 않도록 하기위해 JDK 1.5부터 도입된 문법으로, 이전 자바에서는 제네릭 타입 파라미터 없이 자바를 코딩해왔다. 그래서 이전의 자바 버전의 코드와 호환성을 위해 제네릭 코드는 컴파일되면 제네릭 타입은 사라지게 된다. 즉, 클래스 파일(.class)에는 제네릭 타입에 대한 정보는 존재하지 않는 것이다. 컴파일 타임에만 타입 제약 조건을 정의하고, 런타임에는 타입을 제거하기 때문에, 어찌보면 제네릭은 반쪽 짜리 언어 문법이라고 할수 있다. 그래서인지 제네릭을 개발자가 잘못된 방향으로 설계를 하면 잠재적인 힙 오염(heap pollution) 문제에 빠지게 되는 잠재적인 위험성을 가지고 있다. 따라서 올바르게..

category_image
인파_
2023.01.20
(0)
Language/Java (JVM)

☕ 힙 오염 (Heap Pollution) 이란?

힙 오염 (Heap pollution) 힙 오염(Heap pollution)은 단어 그대로 JVM의 힙(Heap) 메모리 영역에 저장되어있는 특정 변수(객체)가 불량 데이터를 참조함으로써, 만일 힙에서 데이터를 가져오려고 할때 얘기치 못한 런타임 에러가 발생할 수 있는 오염 상태를 일컫는다. 힙 오염의 대표적인 원인 주자로 꼽히는 것이 바로 제네릭(Generics) 이다. 사실 Java 5 버전에 제네릭 문법이 처음 도입되었을때 약간의 논란이 있었다. 왜냐하면 기존 컬렉션 프레임워크(Collection Framework)의 클래스들을 raw type으로서 써왔는데 갑자기 타입 체크(type check) 기능을 넣으니 기존 프로그램과의 호환성을 고려해야 하는 문제점이 있었기 때문이다. 그래서 제네릭은 컴파..

category_image
인파_
2023.01.19
(0)
Language/Java

☕ 자바 제네릭의 공변성 & 와일드카드 완벽 이해

자바의 공변성 / 반공변성 제네릭의 와일드카드를 배우기 앞서 선수 지식으로 알고 넘어가야할 개념이 있다. 조금 난이도 있는 프로그래밍 부분을 학습 하다보면 한번쯤은 들어볼수 있는 공변성(Covariance) / 반공변성(Contravariance) 합쳐서 '변성(Variance)' 이라하는 개념이다. 변성은 타입의 상속 계층 관계에서 서로 다른 타입 간에 어떤 관계가 있는지를 나타태는 지표이다. 그리고 공변성은 서로 다른 타입간에 함께 변할수 있다는 특징을 말한다. 이를 객체 지향 개념으로 표현하자면 Liskov 치환 원칙에 해당된다. 예를들어 배열(Array)과 리스트(List)가 있다고 하자. 자바에서 각 변성의 특징은 다음과 같이 된다. 공변 : S 가 T 의 하위 타입이면, S[] 는 T[] 의 ..

category_image
인파_
2023.01.18
(0)