Java로 자료구조 이해하기 3편(Stack과 Queue)
2021. 10. 2. 16:28
Java
Stack과 Queue란? Stack(Class) LIFO(Last In First Out) 구조 마지막에 저장한 것을 제일 먼저 꺼낸다. Array 기반 Queue(Interface) FIFO(First In First Out) 구조 제일 먼저 저장한 것을 제일 먼저 꺼낸다. LinkedList 기반 -> Interface이기 때문에 LinkedList가 Queue를 구현 이게 끝 입니다. 왜 그런지 알아 보도록 하겠습니다. Stack은 밑이 막혀있고 위만 뚫려 있는 구조 입니다. 우리가 일반적으로 알고 있는 상자와 같습니다. 책을 넣으면 마지막에 넣은 책 부터 뺄 수가 있죠? 정확히 그와 같은 구조 입니다. 그렇기 때문에 마지막에 저장한 것을 제일 먼저 꺼낸다 는 특징이 있습니다. 반대로 Queue ..
Java로 자료구조 이해하기 2편(Arraylist와 LinkedList)
2021. 10. 2. 15:33
Java
1편에서는 Array와 ArrayList에 대해서 알아 보았습니다. 2편에서는 LinkedList와 ArrayList를 비교하며 알아보도록 하겠습니다. LinkedList와 ArrayList는 뭐가 다르지? 대부분 같다고 보면 되고, 핵심적으로 다른 부분은 주소가 순차적이냐 순차적이지 않느냐의 차이입니다. ArrayList는 순차적인 주소를 가집니다 그렇기 때문에 접근성은 정말 빠릅니다. 하지만 중간에 추가 및 삭제 시 느린 자료구조입니다. 이를 개선한 것이 LinkedList 입니다. LinkedList는 배열과는 다르게 Link 즉, 선으로 각 메모리를 연결한 것 입니다. 그래서 접근성은 느리지만, 중간에 추가 삭제는 ArrayList 보다 훨씬 빠릅니다. 그럼 그림으로 알아 보도록 하겠습니다. 그림..
Java Serializable
2021. 10. 2. 14:49
Java
✔️ 직렬화를 공부하게 된 계기 현재 스프링부트를 이용하여 토이 프로젝트를 진행 중입니다. 그런데 진행 중 이런 에러가 발생 했습니다. java.io.InvalidClassException: com.devlogmoa.config.auth.dto.SessionMember; local class incompatible: stream classdesc serialVersionUID = -8498973270536986012, local class serialVersionUID = -1124684850244601429 풀이하자면, 스트림에 직렬화된 클래스의 UID와 나의 로컬에 있는 클래스 UID가 달라서 역직렬화를 할 수가 없다는 내용입니다. 지금까지 직렬화 역직렬화는 많이 들어봤었는데, 딱히 알아야할 필요성을..
java로 쿠키와 세션 이해하기
2021. 10. 2. 14:48
Java
✔️ 쿠키와 세션이란? 🔍 쿠키 쿠키란? 쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일입니다. 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지됩니다. 클라이언트의 상태 정보를 로컬에 저장했다가 참조합니다. Response Header의 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 생성할 수 있습니다. 사용자가 따로 요청하지 않아도 브라우저가 Request 시에 Request Header의 Cookie 속성에 자동으로 전송합니다. 쿠키의 구성 요소 이름 : 각각의 쿠키를 구벼하는데 사용되는 이름 값 : 쿠키의 이름에 매칭되는 값 유효시간 : 쿠키 유지시간 도메인 : 쿠키를 전송할 도메인 경로 : 쿠키를 전..
Java로 자료구조 이해하기 1편(Array와 ArryaList의 차이점)
2021. 9. 30. 23:25
Java
Java로 자료구조 이해하기 1편(Array와 ArryaList의 차이점) 모든 내용은 자바를 기반으로 설명 합니다. Collection 클래스를 기반으로 자료구조를 알아보는 시리즈 입니다. 하지만 그 전에 Array와 ArrayList는 어떻게 다른지에 대해 간단하게 정리하고 가겠습니다. Array는 뭐고 ArrayList는 뭐야? Array Array는 배열을 의미 합니다. 기본적인 배열에 대한 설명은 배제 했습니다. 구조에 대해서만 설명 하겠습니다. 아래 그림을 보면, 배열은 메모리에 순차적으로 생성 됩니다. 즉, 연속된 주소를 가집니다. 따라서, 접근성이 매우 좋습니다. 순차적으로 나열되어 있기 때문에 간단한 연산으로 접근할 수 있기 때문입니다. 시작주소 + index * byte 의 수식을 사용..
static메서드에 generic 사용
2021. 9. 24. 22:24
Java
✔️ static 메서드에 generic 사용이 가능할까? 결과를 먼저 보자면 가능합니다. static은 공유 자원이기 때문에 메서드의 매개변수에 generic 사용이 불가능 할 것이라 생각할 수 있지만, 아닙니다. 저는 그렇게 생각이 들었습니다. 공유를 하는데 매번 매개변수가 바뀐다고?? 라고 단순히 생각했습니다. 하지만 조금 더 생각 해보면 아니라는 것을 알 수 있습니다. 공유를 하던 안하던 전혀 무관한 내용입니다. 클래스의 타입 매개변수와 메서드의 타입 매개변수를 이해하면 됩니다. 클래스의 타입 매개변수는 class A과 같이 선언 합니다. 이는 인스턴스 변수로 인식됩니다. 즉, static에서는 당연히 사용할 수가 없습니다. 하지만 메서드의 타입 매개변수는 static void test(T a) ..
StringBuilder, StringBuffer와 String 차이
2021. 5. 15. 09:02
Java
Java에서는 문자열을 다룰 때 String, StringBuffer, StringBuilder가 있습니다. 이 차이를 제대로 모르고 쓴다면 연산이 많이 질 경우 문제가 발생 하게 됩니다. 그 차이에 대해 알아 보도록 하겠습니다. String과 StringBuffer, StringBuilder의 차이 String은 불변, Buffer와 Bulder는 가변 객체 입니다. 불변이란 객체를 변화 시킬 수 없는 것이고, 가변은 객체가 변할 수 있는 것 입니다. 예를 들어 보겠습니다. 아래의 코드는 문자열을 더했지만 String 클래스가 연산한 값을 새로운 String 객체로 생성한 것 입니다. 결과는 "ab"이지만 새로 "b" 문자열을 합칠 때 새로운 객체를 생성하고 이전의 str 객체는 GC에 의해서 제거 되..