Backend/JAVA (11) 썸네일형 리스트형 [JAVA] List #JAVA #컬렉션 #List[!NOTE] 개념순서가 있고, 중복을 허용하는 자료 구조를 리스트(List)라 한다.앞서 배운 [[ArrayList]], [[LinkedList]] 는 내부 구현만 다르며 같은 기능을 제공한다. 위의 공통 기능들을 인터페이스로 추상화 한 것이 List이다.리스트를 구현하고, 실행하다보면 의존관계 주입의 시점에 따라서 의존관계의 종류가 달라지는 것을 볼 수 있다. ( *[[컴파일 타임, 런타임 의존 관계]] )배열 리스트 vs 연결 리스트배열 리스트의 최적화자바 내부에서 메모리 고속 복사를 활용해 성능이 최적화된다.배열 리스트를 사용하는 것이 유리하나 드물게 첫번째 데이터에 접근, 삭제가 많은 경우에는 LinkedList를 사용 하는 것이 유리하다. 출처 : 인프런 "김영한.. [JAVA] HashSet #JAVA #컬렉션Set[!title] 주요 특징Set(세트/셋)은 유일한 요소들의 컬렉션이다.유일성 : 중복된 요소를 허용하지 않는다.추가시 이미 존재하는 요소시 무시순서의 미보장빠른 검색중복을 허용하지 않고, 요소의 유무만 중요한 경우 사용됨.한계Set는 구조는 단순하나 데이터 추가, 검색 모두 O(n)의 시간 복잡도로 성능이 좋지 않고 데이터가 많을 수록 더욱 더 효율이 떨어진다.검색의 경우 [[ArrayList]] 와 [[LinkedList]] 의 성능과 비슷하지만, 데이터 추가시 중복을 체크하기 위해 전체 데이터를 순회( O(n) )하는 단점이 있다.=> 이를 극복하기 위해 [[Hash(해시)]] 알고리즘을 도입한다.HashSet앞서 말한 Set의 단점을 Hash 알고리즘의 도입으로 보완한 자료.. [JAVA] Hash 알고리즘 #JAVA #컬렉션 #Set #알고리즘컴퓨터 세상에서 모든 객체는 정수로 표현이 가능하다. (메모리)즉, 모든 데이터를 정수로 표현하고, 특정 정수를 통해 나눈 나머지를 이용한다고 가정한다면 나머지의 집합 범위로 축소시켜 모두 저장할 수 있다.패러다임의 전환생각의 틀 변경기존의 배열은 메모리 공간에 데이터를 저장하고, Index를 통해 접근한다.=> ==배열의 Index 가 곧 데이터라면??==Index를 통해 데이터로 바로 접근 할 수 있으므로 O(1) 성능으로 데이터 검색 가능하지만 이 방법에는 문제가 발생한다.저장하는 데이터의 값이 늘어나면 배열의 크기가 늘어나고, 낭비되는 메모리의 양이 함께 늘어난다.배열의 크기를 고정시키고, 해당 크기로 데이터를 나머지 연산으로 데이터를 저장한다면 크기가 큰 데.. [JAVA] LinkedList #JAVA #컬렉션 #List[!NOTE] 주요 특징배열의 단점( [[ArrayList]] )을 극복하고 다양한 상황에서 유연한 자료 구조로 활용된다.Node(노드) 개념의 도입노드는 현 데이터 내부에 다음 데이터의 참조값을 포함해서 가지고 있다.-> 마치 데이터가 연결돼 있는 듯한 효과링크드 리스트에 A -> B -> C 순서로 저장한 경우의 개념도LinkedList의 장단점장점동적 메모리 할당 : 필요할 때마다 노드를 추가하기 때문에 메모리 효율 증가첫 번째 인덱스의 추가/삭제 시 O(1) 의 성능단점순차 검색 성능 O(n) : 링크를 타고 순차적으로 접근해서 검색하는 방식이리 때문메모리 사용량 증가 : 각 노드가 다음 노드를 가리키는 참조를 추가적으로 저장하기 때문LinkedList의 시간 복잡도추.. [JAVA] ArrayList #JAVA #컬렉션 #ListArrayList와 배열Java를 사용하면, 데이터를 효율적으로 관리하고 조작할 수 있는 다양한 자료 구조가 필요하다.그 중에서 ArrayList는 배열의 한계를 극복하고,동적으로 배열 크기를 조정할 수 있는리스트다.배열의 개념과 특징배열은 고정된 크기의 데이터 저장소로, 인덱스를 통해 데이터 접근을 빠르게 접근 할 수 있는 자료구조이다.인덱스를 통한 빠른 접근 속도 : 특정 요소 접근 / O(1)순차적 검색 : 배열의 모든 요소를 순차적으로 탐색(검색) / O(n)배열은 특정 위치에 데이터를 삽입하거나 삭제할 때, 모든 데이터를 이동해야하는 점과 크기가 고정적이라는 단점을 가지고 있다.ex) 배열의 첫번째 Index에 데이터를 삽입할 경우 기존 첫번째 데이터부터 모두 오른쪽.. [JAVA] 제네릭 #JAVA배경같은 로직을 가지고, 두 타입의 자료를 다루는 경우를 생각해보자.새우만 담을 수 있는 통과, 조개만 담을 수 있는 통이 있을 때안에 들어있는 조개와 새우를 넣고 뺴는 행위(공통 로직)에는 변함이 없지만 통을 따로 나누어야만 한다.(코드의 분리)하지만 따로 통에 들어갈 수 있는 해산물을 정하지 않고, 해산물 통으로 분류하고, 들어오는 해산물에 따라서 담는다면 편할 것이다.(코드의 재사용)=> 제네릭의 사용으로 코드 재사용과 타입 안정성을 모두 잡을 수 있다.제네릭의 핵심은 사용할 타입을 미리 정하지 않는다는 것이다.제네릭제네릭(Generic)제네릭 타입(Generic Type)클래스나 인터페이스를 정의할 때 타입 매개변수를 사용하는 것타입 매개변수(Type Parameter)제네릭 타입이다 메.. [JAVA] 예외 처리 #JAVA예외 처리가 생겨나게 된 이유현대의 서비스들은 외부 서버와의 연결, 네트워크 통신 등 많은 부분들을 서로 연계하여 만들어진다.그로인해 발생되는 많은 예외들을 어떻게 처리해야 할 것인가는 매우 중요하다.예외 처리 기법이 생겨나기 전의 처리반환 값으로 예외 처리오류가 발생했을 때 직접 값을 반환해 처리하는 방식 ex) "success", "false"=> 해당 방식은 수많은 수많은 if문들의 중첩으로 정상 흐름과 예외흐름이 겹쳐 있어, 중요한 정상 흐름을 알아보기가 쉽지 않다.예외 계층자바는 예외를 처리하기 위한 매커니즘을 제공한다.keyword : try, catch, finally, throw, throws체크 예외와 언체크 예외의 분기예외는 폭탄과 같고 잡아서 처리하거나 계속 던져버려야 한다... [JAVA] 클래스 (중첩, 내부) #JAVA #클래스중첩 클래스의 분류정적 중첩 클래스 : 바깥 클래스와 밀접한 관련이 있지만, 인스턴스 간에 데이터 공유가 필요 없을 떄 사용내부 클래스 : 바깥 클래스의 인스턴스와 연결, 바깥 클래스에 의존하거나 강하게 연관된 작업을 수행할 때 사용지역 클래스내부 클래스의 특징지역 변수에 접근 가능, 접근하는 지역 변수는 final익명 클래스이름이 없는 지역 클래스일회성 구현하여 사용할 때 유용사용 이유논리적 그룹화 : 특정 클래스가 다른 하나의 클래스 안에서만 사용되는 경우, 해당 클래스 안에 포함하는 것이 논리적으로 더 그룹화 되는 효과캡슐화 : 중첩 클래스는 바깥 클래스의 private 멤버 변수에 접근 가능하다.불필요한 public 메서드 제거 가능지역 클래스지역클래스 역시 내부 클래스이기 때문.. 이전 1 2 다음