인파

You Can Become A

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

공부한 내용을 정리합니다
Language/Java

☕ 람다 표현식(Lambda Expression) 완벽 정리

람다 표현식 (Lambda Expression) 람다 표현식(lambda expression)이란 함수형 프로그래밍을 구성하기 위한 함수식이며, 간단히 말해 자바의 메소드를 간결한 함수 식으로 표현한 것이다. 지금까지 자바에서는 메서드를 하나 표현하려면 클래스를 정의해야 했다. 하지만 람다식으로 표현하면 메서드의 이름과 반환값을 생략할 수 있고 이를 변수에 넣어 자바 코드가 매우 간결해지는 장점이 있다. 아래 그림에서 보듯이 int add(int a, int b) {} 메소드 표현식을, 메서드 타입, 메서드 이름, 매개변수 타입, 중괄호, return 문을 생략하고, 화살표 기호를 넣음으로써 코드를 혁명적으로 함축했음을 볼 수 있다. 이러한 특징으로 람다식을 이름이 없는 함수 익명 함수(anonymous..

category_image
인파_
2023.03.27
(0)
Language/JavaScript (WEB)

🌐 브라우저 이미지 캐시 방지하기

Disable Image Cache 웹페이지 속도 테스트나 혹은 이미지를 다루는 라이브러리 중에 이미지를 Ajax로 불러오다가 캐시에 의한 CORS 에러 문제 등 여러 이유들에 의해서 브라우저가 이미지를 캐싱 하지 않게 하고 싶은 때가 있을 것이다. 그러나 직접 서버에서 캐시 관련 헤더 설정을 할수 없거나 다른 업체의 서버를 사용하는 경우 결국 프론트단에서 처리해야 한다. ctrl + F5 강력 새로고침으로 임시적으로 해결할수는 있지만, 매번 이럴수도 없고 무슨 방법이 없을까 고민하겠지만 의외로 방법은 간단하다. 브라우저는 이미지를 완전히 같은 url 이름으로 불러들일때는 캐시한 이전 이미지를 불러온다. 이러한 특성을 이용하여 url의 쿼리스트링 값만 다르게 주는 것으로 캐시되지 않은 똑같은 이미지를 불..

category_image
인파_
2023.03.07
(0)
Language/JavaScript (WEB)

🌐 html의 data-속성 사용법 완벽 가이드

HTML 데이터셋 속성 HTML의 데이터셋 속성은 커스텀 사용자 속성을 DOM 요소에 저장하는데 표준화된 방법을 제공한다. 한마디로 자바스크립트에서 변수를 사용하듯이, 일종의 html의 변수 역할이라고 말할 수 있다. 데이터셋 속성의 장점 일반 속성 과 데이터셋 속성 데이터셋도 일종의 속성(attribute)이다. 보통 html에서 속성이라 하는 것은 여러분도 잘 알듯이 id, class, src, title 등의 태그에 붙이는 어트리뷰트를 말한다. 이들 속성은 특정 태그의 소스 경로나 이름, 너비, 아이디를 기재하는데 정해져 있다. 그런데 html 태그에 그 엘리먼트만이 지니고 있는 고유한 커스텀 값을 지정해 사용하고 싶을 때가 있다. 마치 아래 코드 처럼 input 태그의 value 속성으로 값을 기..

category_image
인파_
2023.03.03
(0)
Language/Java

☕ 개발자들을 괴롭히는 자바 NULL 파헤치기

개발자의 영원한 숙제 NULL null 이라는 단어는 프로그래밍을 배워보면 빠르나 늦나 반드시 접하게 되는 녀석이다. 프로그래밍을 갓 접한 사람들은 null을 그저 '값이 없는 것' 으로 외우고 넘어가버린다. 심지어 null을 부정의 뜻으로 0 이나 공백 그리고 false 와 동일선상에 놓고 생각하기도 한다. 당연히 이는 잘못된 정의 이다. 그저 값이 없다는 표현일 뿐인데 개발자의 영원한 숙제 라니 뭐니 라는 표현을 쓰는 이유는, 개발자들이 null을 마주하는 경우가 프로그램 실행중에 에러 메세지(NullPointerException) 로 인해 잘동작 하던 프로그램이 죽어버려 원인을 찾느라 심한 고생을 하기 때문이다. 우선 NULL 이라는 개념은, 영국의 컴퓨터 과학자인 토니 호어(Tony Hoare)가..

category_image
인파_
2023.02.28
(0)
Language/JavaScript (WEB)

🌐 HTML 요소의 위치 좌표 값 얻기

HTML 요소의 좌표 웹문서의 어떤 요소(element)의 위치 값을 자바스크립트로 구할 필요가 있을때, DOMRect 클래스의 getBoundingClientRect() 메서드를 통해 좌표 정보가 들은 객체를 얻을 수 있다. 대부분의 브라우저를 지원하며 쉽고 빠르게 위치 값을 가져올 수 있다 const rect = document.querySelector('div').getBoundingClientRect(); console.log(rect); getBoundingClientRect() 메서드의 반환 값은 엘리먼트의 padding과 border-width를 포함해 전반적인 사각형의 위치와 크기를 px 단위로 나타낸다. 각 속성의 값들이 나타나는 의미는 다음과 같다. x : 브라우저 창기준 x 좌표 y ..

category_image
인파_
2023.02.27
(0)
Language/Java

☕ 싱글톤 객체가 깨져버리는 경우 (역직렬화 / 리플렉션)

싱글톤 객체 싱글톤 객체는 단 하나의 유일한 객체를 의미 한다. 해당 인스턴스가 리소스를 많이 차지하는 무거운 인스턴스일때, 메모리 절약을 위해 인스턴스가 필요할 때 똑같은 인스턴스를 새로 만들지 않고 기존의 인스턴스를 가져와 활용하는 기법이다. 아래는 싱글톤 디자인 패턴을 구현하는 방법중 멀티쓰레드 환경에서 안전하고 검증된 방법인 Bill Pugh Solution 방법으로 구현한 싱글톤 객체이다. [GOF] 💠 싱글톤(Singleton) 패턴 - 꼼꼼하게 알아보자 Singleton Pattern 싱글톤 패턴은 디자인 패턴들 중에서 가장 개념적으로 간단한 패턴이다. 하지만 간단한 만큼 이 패턴에 대해 코드만 던져주고 끝내버리는 경우가 있어, 어디에 쓰이는지 어떠한 문 inpa.tistory.com cla..

category_image
인파_
2023.02.15
(0)
Language/Java

☕ 자바 역직렬화 방어 기법 - 총정리 모음

Serializable 구현은 보안에 구멍이 생길 수 있다 보통 자바에서 인스턴스는 생성자를 이용해 만든는 것이 기본이다. 하지만 역직렬화는 언어의 기본 메커니즘을 우회하여 객체를 바로 생성하도록 한다. 직렬화된 파일이나 데이터만 있다면 readObject() 를 통해 생성자 없이 곧바로 인스턴스를 만들수 있기 때문이다. 즉, 역직렬화는 보이지 않은 생성자 이기도 한 것이다. 문제는 만일 어느 객체가 생성자를 통해 인스턴스화 할때 불변식이나 허가되지 않은 접근을 설정하였을 경우 이를 무시하고 생성된다는 점이다. 예를들어 아래 Member 클래스는 생성자로 나이 입력값을 음수를 넣으면 이를 걸러내는 로직이 있다고 한다. class Member implements Serializable { private s..

category_image
인파_
2023.02.14
(0)
Language/Java

☕ 자바 직렬화(Serializable) - 완벽 마스터하기

자바의 직렬화 & 역직렬화 직렬화(serialize)란 자바 언어에서 사용되는 Object 또는 Data를 다른 컴퓨터의 자바 시스템에서도 사용 할수 있도록 바이트 스트림(stream of bytes) 형태로 연속전인(serial) 데이터로 변환하는 포맷 변환 기술을 일컫는다. 그 반대 개념인 역직렬화는(Deserialize)는 바이트로 변환된 데이터를 원래대로 자바 시스템의 Object 또는 Data로 변환하는 기술이다. 이를 시스템적으로 살펴보면, JVM의 힙(heap) 혹은 스택(stack) 메모리에 상주하고 있는 객체 데이터를 직렬화를 통해 바이트 형태로 변환하여 데이터베이스나 파일과 같은 외부 저장소에 저장해두고, 다른 컴퓨터에서 이 파일을 가져와 역질렬화를 통해 자바 객체로 변환해서 JVM 메..

category_image
인파_
2023.02.13
(0)
Language/JavaScript (WEB)

🌐 한눈에 이해하는 이벤트 흐름 제어 (버블링 & 캡처링)

HTML 이벤트의 흐름 HTML 문서의 각 엘리먼트들은 아래와 같이 태그 안의 태그가 위치하는 식으로 계층적으로 이루어짐을 볼 수 있다. 이러한 계층적 구조 특징 때문에 만일 HTML 요소에 이벤트가 발생할 경우 연쇄적 이벤트 흐름이 일어나게 된다. 예를들어 아래 3개가 중첩된 박스 영역에서 가장 자신 엘리먼트인 p 박스를 클릭하면 onclick 이벤트 스크립트가 p 뿐만 아니라 그의 부모인 div와 form 엘리먼트도 발생함을 볼 수 있다. FORM DIV P See the Pen event bubbleing 1 by barzz12 (@inpaSkyrim) on CodePen. 이러한 현상을 이벤트 전파(Event Propagation)라 부르며, 전파 방향에 따라 버블링과 캡처링으로 구분한다. 버블링..

category_image
인파_
2023.02.10
(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)