개발 라이프(355)
-
[Java] DI (의존성 주입) / IoC (제어의 역전)
스스로 프로젝트를 진행하면서 코드를 짜다보면 명확하게 모르고 두루뭉실 아는 상태에서 사용하는 코드들 혹은 개념들이 많다고 느낀다. 그 중에서 DI는 가장 흔히 사용하고 있음에도 불구하고 뭔지 잘 모르고 있는 것 같아 정리해야할 필요가 있어보인다. IoC (제어의 역전) IoC를 해석하게 된다면 '제어의 역전' 이라고 부르는데, 이는 개발적인 개념에서 객체의 생성, 생명 주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 뜻한다. Spring을 사용한다면 모든 객체에 대한 제어권은 개발자인 본인이 가지고 있는 것이 아니라 Spring이 알아서 관리하고 제어한다는 것이다. IoC 컨테이너 컨테이너라는 것은 보통 객체의 생명주기를 관리하고, 생성된 인스턴스들에게 추가적인 기능들을 제공하도록 하는 것이다..
2023.01.06 -
[Java] 스택(Stack) / 큐(Queue)
자료구조 중에서 가장 기본적이고 대표적인 자료구조에 대해서 정리를 하고자 한다. 정보처리기사 시리즈 자격증들을 취득할 때 항상 나오던 개념일 뿐만 아니라 실무에서도 해당 개념은 기본적인 베이스로 잡고가는 자료구조라고 생각한다. 스택(Stack) 스택이라는 것은 말 그대로 쌓아올린다는 뜻이다. 흔히 볼 수 있는 게임에서도 스택이라는 형태로 경험치를 쌓거나 혹은 스킬 포인트를 쌓듯이 스택은 책을 쌓는 것처럼 차곡차곡 쌓아 올린 형태의 자료구조를 뜻한다. [스택의 특징] 스택은 위의 사진처럼 같은 구조와 크기의 자료를 정해진 방향으로만 쌓을수 있고, top으로 정한 곳을 통해서만 접근할 수 있다. top에는 가장 위에 있는 자료는 가장 최근에 들어온 자료를 가리키고 있으며, 삽입되는 새 자료는 top이 가리키..
2023.01.06 -
사용자 패스워드 전송 및 보관 방법
보안은 개발자들이 가장 중요하게 생각하는 부분 중 하나이다. 현재 계정을 생성하고 이용하는 사이트들 중에서 보안을 중요하게 생각하지 않는 사이트는 거의 없을 것이다. 그중에서도 비밀번호에 대한 관리는 철저히 관리되어야 한다. 기본적으로 비밀번호를 관리하는 데에 있어서 가장 대표적인 방법은 암호화 / 복호화를 통해 관리하는 것이다. 다만, 암호화라는 것은 양방향성을 띄는 관리 기법이다. 즉, 암호화를 하게 된다면 반대로 복호화도 가능하다는 것이고, 이를 활용해서 해킹을 당할 수도 있는 것이다. 이러한 양방향성에 대한 문제점을 인식하고 보완하여 관리하는 방식이 단방향성의 해싱기법이다. 단방향 해싱 단반향 해싱은 원본 데이터를 입력하게 되면 완전히 다른 암호화된 데이터로 변환한다. 이 점은 기본적인 암호화방식..
2023.01.06 -
시간복잡도 / 공간복잡도
이름만 들으면 벌써부터 머리가 아파올 것이다. 시간, 공간이라는 단어가 주는 압박감에서부터 복잡도라는 키워드를 들으니 우선적으로 수학을 잘해야할 것 같은 느낌과 함께 어려운 개념이라는 느낌이 우선적으로 들기 때문이다. 차근차근 알아보자. 우선, 복잡도라는 개념은 개발자들이 구현한 알고리즘의 성능을 평가하기 위한 용도로써 기준이 되는 개념이라고 보면 될 것 같다. 그 중에서 중요하다고 생각되는 것이 시간복잡도, 공간복잡도이다. 복잡도라는 이름만 들어도 생각할 수 있는 것이 복잡도가 낮을 수록 좋은 알고리즘이라는 것이다. ※ 시간복잡도 시간복잡도는 특정 알고리즘이 수행되기까지 걸리는 시간 혹은 횟수를 의미한다. 같은 결과를 가지게 되는 여러 프로그래밍 코드에서도 작성 방법에 따라 걸리는 시간이 달라지며, 이..
2023.01.06 -
CORS (교차 출처 리소스 공유)
CORS(Cross-Origin Resource Sharing)는 교차 출처 리소스 공유 정책이라고 해석할 수 있다. 즉 다른 출처의 자원에 관한 공유 정책이라고 보면 될 것이다. [CORS 에러 예시] 🚨 Access to fetch at ‘https://myhompage.com’ from origin ‘http://localhost:3000’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the re..
2023.01.05 -
[Java] LinkedList
LinkedList는 각각의 노드를 연결하는 방식의 자료구조이다. 각각의 노드들은 데이터와 함께 다음 노드와 이전 노드 값을 내부적으로 가지고 있다. (이중형 연결 리스트) 어느 위치에서든 추가나 삭제를 할 경우 변경되는 노드만 다시 연결해주면 된다. 그래서 ArrayList는 주로 검색이 많은 경우에 사용하고 LinkedList는 잦은 삽입/삭제 작업이 발생할 때 사용한다. LinkedList 사용 import java.util.*; public class TestMain { public static void main(String[] args) { // LinkedList 생성 / 초기화 LinkedList linklist = new LinkedList(); // LinkedList 자원 추가 link..
2023.01.05