본문 바로가기

Programming/Java83

[Java] - 자바에서는 stack과 queue를 어떻게 구현할까? Stack과 Queue 자료 구조 stack queue LIFO (last in first out) 마지막에 저장한 데이터를 가장 먼저 꺼낸다. FIFO(first in first out) 처음 저장한 데이터를 가장 먼저 꺼낸다. 순차적으로 데이터를 추가하고 마지막 순서부터 삭제하는 스택에는 ArrayList와 같은 배열 기반의 컬렉션 클래스가 적합하다. 데이터를 꺼낼 때 항상 첫번째 데이터부터 삭제하므로 배열 기반 컬렉션 클래스를 사용하면 데이터를 삭제할 때마다 빈공간을 매우기 위해 데이터 전체가 이동해야 한다. 그러므로 데이터 추가, 삭제가 쉬운 LinkedList로 구현하는 것이 적합하다. Stack, Queue 구현 - java api 문서 보기 자바에서는 스택을 Stack 클래스로 구현하여 제공.. 2021. 3. 6.
[Java] - Collection Framework :: List - LinkedList ② 링크드 리스크는 불연속적으로 존재하는 데이터를 서로 연결한 형태로 구성되어 있다. 장점과 단점, 그리고 코드를 살펴보자. 링크드 리스트의 장점 ⓐ 비순차적인 데이터의 추가, 삭제가 빠르다. -> 배열처럼 데이터를 복사하는 과정이 없기 때문에 빠르다. 삭제 링크드 리스트에서 요소를 삭제할 경우 삭제할 노드 주소를 저장하고 있는 노드가 삭제할 노드의 다음 노드를 참조하도록 변경하면 된다. 추가 추가하고자 하는 위치의 이전 노드의 참조를 새로운 노드에 대한 참조로 변경하고, 새로운 노드가 다음 노드를 참조하도록 변경하기만 하면 된다. add(인덱스, 요소) 메서드를 사용하여 추가한다. add(int index, E element) Inserts the specified element at the specifi.. 2021. 3. 6.
[Java] - Map인터페이스, 주요 메서드 Map key와 value를 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는 데 사용된다. 주요 메서드 void clear() Removes all of the mappings from this map (optional operation). default V compute(K key, BiFunction 2021. 3. 5.
[Java] - List 인터페이스, 주요 메서드 List 중복을 허용하면서 저장순서가 유지되는 컬렉션을 구현하는데 사용된다. Random access 와 Sequential access란 enjoyjava.tistory.com/entry/Random-Access%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC Random Access에 대하여 일반적으로 Random이라 함은 무작위를 의미합니다. 컴퓨터로는 주로 Random하게 보이려는 노력을 통해 무작위 작업을 구현하죠.. 예를 들어 java의 Random클래스의 경우 seed라는 개념으로 주로 초단위 enjoyjava.tistory.com arraylist는 인덱스를 통한 무작위 접근이 가능하고, linkedlist는 순차적으로 접근한다. random access는 원하는 데이터를.. 2021. 3. 5.
[Java] - 컬렉션 프레임워크의 핵심 인터페이스 List, Set, Map 컬렉션 데이터 그룹엔 크게 3가지가 있다. List, Set, Map Map은 collection과는 전혀 다른 형태로 컬렉션을 다루기 때문에 같은 상속 계층도에 포함되지 않는다. 특징 List 순서가 있는 데이터의 집합, 데이터의 중복 허용. 구현 클래스 ) ArrayList, LinkedList, Stack, Vector Set 순서를 유지하지 않는 데이터의 집합. 데이터의 중복 허용 않는다. 구현 클래스 ) HashSet, TreeSet Map key-value 쌍으로 이루어진 데이터의 집합. 순서 유지 않으며, 키 중복 X, 값 중복 O 구현 클래스 ) HashMap, TreeMap, HashTable, Properties 컬렉션 프레임워크의 모든 컬렉션 클래스들을 Li.. 2021. 3. 5.
[Java, OOP] - OCP, 개방 - 폐쇄 원칙 위반 사례 코드 출처는 [스프링 핵심 원리 - 김영호 강의] 입니다. OCP 개방 - 폐쇄 원칙 (Open/Close principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 구현체가 추상 객체, 구현 객체에 모두 의존하고 있다. -> DIP 위반 할인 정책을 변경하기 위해 코드 수정이 발생했다. -> OCP 위반 해결 방안 누군가 대신 주입해주자! 2021. 3. 4.