본문 바로가기

반응형

Programming/Java

(19)
[Java] 김영한의 자바 중급 2편 #7 - HashSet Set : 중복을 허용하지 않고, 순서를 보장하지 않는 자료 구조1. 직접 구현하는 Set1 - MyHashSetV1이전에 구현한 성능이 O(n)으로 느린 MyHashSetV0를 다시 한번 확인해보자.1.1. 단점add() 사용 시 중복 데이터가 있는지 전체 데이터를 항상 확인해야 한다. → o(n)contains()로 데이터를 찾을 때는 Set에 있는 모든 데이터를 찾고 비교해야 하므로 평균 O(n)이 걸린다.→ 데이터를 추가할 때 중복 데이터가 있는지 체크하는 부분에서 성능이 o(n)으로 좋지 않다.→ 이 부분을 평균 O(1)로 개선해보자.1.2. 해시 알고리즘을 사용하도록 변경package collection.set;import java.util.Arrays;import java.util.Linke..
[Java] 김영한의 자바 중급 2편 #6 - Set 1. List vs Set자료구조에서 List와 Set은 각각 특정한 방식으로 데이터를 저장하고 관리하는데 사용된다. 1.1. List순서가 중요하거나 중복된 요소를 허용할 때 주로 사용된다. 특징순서 유지중복 허용인덱스 접근1.2. Set중복을 허용하지 않고 요소의 유무만 중요한 경우에 사용된다.  특징유일성순서 미보장빠른 검색 (내부적으로 최적화되어 있다.) 1.3. List, Set 예시List : 장바구니 목록처럼 중요한 일련의 이벤트 목록Set : 회원 ID 집합처럼 고유한 항목의 집합 2. 직접 구현하는 Set0 - 시작인덱스가 없기 때문에 데이터를 넣고, 데이터가 있는지 확인하고, 데이터를 삭제하는 정도면 충분하다. 그리고 데이터를 추가할 때 중복 여부만 체크해주면 된다.add(value)c..
[Java] 김영한의 자바 중급 2편 #5 - List 1. 리스트 추상화1 - 인터페이스 도입자료 구조에 다형성과 OCP 원칙이 어떻게 적용되는지 확인해본다. List : 순서가 있고, 중복을 허용하는 자료 구조→ MyArrayList와 MyLinkedList의 공통 기능을 인터페이스로 뽑아서 추상화를 한다면 다형성을 활용한 다양한 이득을 얻을 수 있다.   MyListpackage collection.list;public interface MyList { int size(); void add(E e); void add(int index, E e); E get(int index); E set(int index, E element); E remove(int index); int indexOf(E o);}아래의 메서드들은 ..
[Java] 김영한의 자바 중급 2편 #4 - LinkedList 1. 노드와 연결11.1. 배열 리스트의 단점배열의 사용하지 않는 공간 낭비배열의 중간에 데이터를 추가할 때데이터를 추가할 때 기존 데이터들을 오른쪽으로 이동시켜야 한다.데이터를 삭제할 때 빈 공간을 채우기 위해 데이터들을 왼쪽으로 이동시켜야 한다.1.2. 노드와 연결낭비되는 메모리 없이 필요한 만큼 메모리를 확보해서 사용하고, 또 앞이나 중간에 데이터를 추가하거나 삭제할 때도 효율적인 자료 구조가 있는데, 바로 노드를 만들고 서로 연결하는 방식이다.Node Classpublic class Node{ // 저장할 데이터 Object item; // 연결할 노드의 참조 Node next;}1.3. 간단한 예제Node Classpackage collection.link;public class Node { ..
[Java] 김영한의 자바 중급 2편 #3 - ArrayList 0. 빅오(O) 표기법빅오(Big O) 표기법은 알고리즘의 성능을 분석할 때 사용하는 수학적 표현 방식이다.여기서 중요한 것은 알고리즘의 정확한 실행 시간을 계산하는 것이 아니라, 데이터 양의 증가에 따른 성능의 변화 추세를 이해하는 것이다.  빅오 표기법의 예시 O(1) - 상수 시간: 입력 데이터의 크기에 관계없이 알고리즘의 실행 시간이 일정한다.O(n) - 선형 시간: 알고리즘의 실행 시간이 입력 데이터의 크기에 비례하여 증가한다.O(n²) - 제곱 시간: 알고리즘의 실행 시간이 입력 데이터의 크기의 제곱에 비례하여 증가한다.O(log n) - 로그 시간: 알고리즘의 실행 시간이 데이터 크기의 로그에 비례하여 증가한다.O(n log n) - 선형 로그 시간 0.1. 빅오 표기법 정리빅오 표기법은 매..
[Java] 김영한의 자바 중급 2편 #2 - 제네릭2 1. 타입 매개변수 제한다음의 요구사항이 있다고 가정해본다.요구 사항 : 개 병원은 개만 받을 수 있고, 고양이 병원은 고양이만 받을 수 있다.개 병원과 고양이 병원은 검진(checkup)을 할 수 있고, 다른 개 혹은 고양이와의 크기를 비교할 수 있다.1.1. 아무것도 모르는 상태일 경우아무것도 모르는 상태라면 다음의 관점으로 접근할 수 있을 것이다.Dog는 DogHospital 클래스를 만든다.Cat은 CatHospital 클래스를 만든다.main 메서드에서는 dogHospital과 catHospital에 각각 dog와 cat 객체를 생성한다음에 setter 메서드로 집어넣고, 각각 checkup과 bigger 메서드를 통해 검진과 대소비교를 할 수 있을 것이다.1.1.1. 장단점장점으로는 CatHo..
[Java] 김영한의 자바 중급 2편 #1 - 제네릭 1. Generic이 필요한 이유에 대하여  Integer를 담을 수 있는 Boxpackage generic.ex1;public class IntegerBox { private int value; public void set(Integer value) { this.value = value; } public Integer get() { return value; }}  String을 담을 수 있는 Boxpackage generic.ex1;public class StringBox { private String value; public void set(String object) { this.value = object; } pu..
[Java] 김영한의 자바 중급 1편 #10 - 예외처리 실습 1. 예외 처리 도입1 - 시작 위의 프로그램은 반환값을 사용해서 예외를 처리했다. 이런 경우 다음의 문제가 있다.정상 흐름과 예의 흐름이 섞여 있기 때문에 코드를 한눈에 이해하기 어려움예외 흐름이 더 많은 코드 분량을 차지한다. 1.1. 이 문제를 점진적으로 해결해보기   1.2. 정상 프로그램  1.3. 예외  error1(연결 실패), error2(데이터 전송 실패) 둘 다 모든 곳에서 발생한 예외를 잡지 않았기 때문에 결과적으로 main() 밖으로 예외가 던져진다.main() 밖으로 예외가 던져지면 예외 메시지와 예외를 추적할 수 있는 스택 트레이스를 출력하고 프래그램이 종료된다. 1.4. 남은 문제예외 처리를 도입했지만 아직 예외가 복구되지 않는다. 따라서 예외가 발생하면 프로그램이 종료된다.사..

반응형