목록Backend/Java (34)
도도한 개발자
이 글은 세시간 동안 작성하다 ec2 인스턴스의 퍼블릭 IP를 확인하기 위해 페이지 이동하다 전부 날린 후 다시 작성하는 글입니다. 정말 많이 속상하고 화가 났지만 '앞으론 습관적으로 임시저장 버튼을 누르자'라는 교훈과 함께 마음을 다 잡고 다시 쓰렵니다...🫠🐈⬛ 주제 선정 이유장바구니 미션에서 Basic Authentication 사용 방법에 대해 충분히 이해하지 못하고 넘어간 것이 마음에 걸려 다시 학습했습니다. 우아한테크코스에서 소개한 인증 방법은 Basic, Session, Token 이렇게 세 가지였으나 장바구니 미션에 Basic 인증을 적용하였으므로 이번 글에선 Basic 인증이 무엇이지, 어떻게 사용하는지에 대해 다루고자 합니다.🐈⬛ Basic 인증Basic Authentication(..

쓰레드란 무엇일까? 자바 프로그램을 사용하여 뒤에 클래스 이름을 붙이면 적어도 하나의 JVM이 시작된다. 보통 이렇게 JVM.이 시작되면 자바 프로세스(Process) 가 시작하는데, 이 안에 여러 개의 쓰레드라는 것이 수행된다. java 명령어를 사용하여 클래스를 실행시키는 순간, 자바 프로세스가 시작되고, main() 메소드가 수행되면서 하나의 쓰레드가 시작되는 것이다. 왜 쓰레드를 만들었을까? JVM은 기본적으로 아무런 옵션 없이 실행하면 적어도 32MB ~ 64MB의 물리 메모리를 점유하는 반면, 쓰레드를 하나 추가하면 1MB 이내의 메모리를 점유한다. 대부분의 작업을 단일 쓰레드로 실행하는 것보단 다중 쓰레드로 실행하는 것이 더 빠른 시간에 결과를 제공해준다. 따라서 쓰레드를 사용하면 보다 빠른..

Map 이란? 자바에서의 Map은 키(Key)와 값(Value)으로 이루어져 있다. Map에서 다른 데이터와 구분하기 위한 값의 이름을 키라고 하는 이유를 생객해보면 이해하기 쉬울 것이다. Map의 특징은 다음과 같다. 모든 데이터는 키와 값이 존재한다. 키가 없이 값만 저장될 수는 없다. 값 없이 키만 저장할 수도 없다. 키는 해당 Map에서 고유해야만 한다. 값은 Map에서 중복되어도 전혀 상관 없다. Map은 java.util 패키지의 Map이라는 이름의 인터페이스로 선언되어 있고, 구현해 놓은 클래스들도 많이 있다. 이 Map 인터페이스에 선언되어 있는 메소드들의 주요 기능을 보자. 리턴 타입 메소드 이름 및 매개 변수 설명 V put(K key, V value) 첫 번째 매개 변수인 키를 갖는,..

* Queue는 왜 필요할까? 앞에서 LinkedList라는 클래스에 대해 다루어 봤다. LinkedList라는 것은 자료 구조에 대해 배울 때 중요한 항목 중 하나이기 때문에 꼭 기억하고 있어야 한다. LinkedList에서는 바로 앞 뒤의 만 기억한다. 즉, A,B,C가 순차적으로 들어가 있을 때 A는 뒤에 있는 값이 B라는 것만 알 뿐, C의 존재는 모른다. C또한 앞에 B만 알 뿐 A는 모른다. 그렇다면 이렇게 복잡한 LinkedList를 왜 쓸까? 배열과 같이 데이터를 담아 순차적으로 뺄 경우엔 필요 없을지도 모른다. 그러나 배열의 중간에 있는 데이터가 지속적으로 삭제되고, 추가될 경우에는 LinkedList가 배열보다 메모리 공간 측면에서 훨씬 유리하다. 왜냐하면 배열과 같은 ArrayList..

* Set이 왜 필요할까? Collection을 확장한 배열과 비슷한 역할을 하는 3개의 인터페이가 있다고 했다. List, Set, Queue가 그것들인데 List는 순서가 중요한 데이터를 담을 때 사용되는 반면 Set은 어디에 사용되는 것일까? 어떤 값이 존재하는지, 없는지 여부만 중요할 때 Set을 사용하면 된다. 더 나아가 HashSet의 예제를 보자. 자바에서 Set 인터페이스를 구현한 주요 클래스는 Hashset, TreeSet, LinkedHashSet이 있다. · HashSet : 순서가 전혀 필요 없는 데이터를 해시 테이블에 저장한다. Set 중에 가장 성능이 좋다. · TreeSet : 저장된 데이터의 값에 따라 정렬되는 셋이다. red-black이라는 트리 타입으로 값이 저장되며, H..

* ArrayList에서 데이터를 꺼내자 ArrayList 객체에서 어떻게 값을 꺼내고 삭제하는지 알기 전에 객체에 들어있는 데이터의 개수를 가져오는 size() 메소드를 알아야 한다. 이 size() 메소드의 리턴 타입은 int다. 배열.length는 배열의 저장 공간 개수를 의미하지만, size() 메소드의 결과는 ArrayList에 들어가 있는 데이터 개수를 의미한다. public void checkArrayList5() { ArrayList list = new ArrayList(); list.add("A"); list.add("B"); int listSize = list.size(); for(int loop = 0; loop < listSize; loop++) { System.out.println..

* 자바 컬렉션 자바에서 컬렉션은 목록성 데이터를 처리하는 자료 구조를 통칭한다. 자료 구조란 무엇일까? 영어로 "Data Structure"이라고 한다. 즉 어떤 정보를 담는 것을 의미하는데, 하나의 데이터가 아닌 여러 데이터를 담을 때 사용한다. 여러 개의 String 객체들을 하나의 객체에 담는다고 생각해보자. 배열에 담아도 될 것이다. 성능상이나 메모리 효율면에서 가장 좋기 때문이다. 그러나 배열은 그 크기가 정해져 있을 때 유용하다. 그런데 담으려는 데이터의 크기가 얼마나 되는지 모르는 경우엔 어떻게 할까? 자바에서 데이터를 담는 자료 구조는 크게 다음과 같이 분류할 수 있다. · 순서가 있는 목록(List)형 · 순서가 중요하지 않은 셋(Set)형 · 먼저 들어온 것이 먼저 나가는 큐(Queu..

* 제네릭이란? 제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 메소드 안에서 매개변수와 비슷하게 동작할 수 있다. 이 매개변수는 어떠한 변수에 들어갈 값과 관련되어 있는데 이때 제네릭은 그 변수의 데이터 타입과 관련되어 있다. * 실수를 방지할 수 있도록 도와주는 제네릭 점(.) 하나, 쉼표(,), 세미콜론(;) 하나 잘못 찍어 컴파일이 안 된 경우 이클립스 사용 시 코딩 단계에서 매우 쉽게 걸러낼 수 있다. 그러나 실행시 개발자가 미처 생각하지 못한 부분에서 프로그램이 예외를 발생시키는 경우 그 원인을 찾기 쉽지 않은데, 이러한 경우를 대비하기 위해 메소드 개발과 함께 JUnit과 같은 테스트를 잘 해야 한다. 아래 코드를 보자 class Person..