본문 바로가기

복습

(28)
[Java 복습] 직접 적용해보는 List 인터페이스 (feat. 연결 리스트 vs 배열 리스트) 목차 인터페이스 도입의존성 주입컴파일 타임, 런타임 의존관계리스트 성능 비교 리스트 추상화 - 인터페이스 도입다형성과 OCP 원칙을 가장 잘 활용할 수 있는 곳 중에 하나가 바로 자료 구조이다. 자료 구조에 다형성과 OCP 원칙이 어떻게 적용되는지 알아보자. List 자료 구조 순서가 있고, 중복을 허용하는 자료 구조를 리스트( List )라 한다. 우리가 지금까지 만든 MyArrayList 와 MyLinkedList 는 내부 구현만 다를 뿐 같은 기능을 제공하는 리스트이다.  물론 내부 구현이 다르기 때문에 상황에 따라 성능은 달라질 수 있다. 핵심은 사용자 입장에서 보면 같은 기능을 제공한다는 것이다. 이 둘의 공통 기능을 인터페이스로 뽑아서 추상화하면 다형성을 활용한 다양한 이득을 얻을 수 있다  ..
[Java 복습] 직접 구현해보는 LinkedList 목차연결 리스트 구현해보기특정 위치 추가, 삭제 메서드 추가배열 리스트 VS 연결 리스트제네릭 도입 연결 리스트 구현해보기public class Node { Object item; Node next; public Node(Object item) { this.item = item; }public class MyLinkedListV1 { private Node first; // 첫 노드의 위치를 가리킨다. private int size = 0; public void add(Object e) { Node newNode = new Node(e); if (first == null) { first = newNode; ..
[Java 복습] 노드란? 노드 연결, 기능구현 해보기 배열 리스트의 단점배열 리스트는 내부에 배열을 사용해서 데이터를 보관하고 관리한다.이로 인해 다음과 같은 단점을 가진다.배열의 사용하지 않는 공간 낭비배열의 중간에 데이터 추가 노드와 연결낭비되는 메모리 없이 딱 필요한 만큼만 메모리를 확보해서 사용하고, 또 앞이나 중간에 데이터를 추가하거나 삭제할 때도 효율적인 자료 구조가 있는데, 바로 노드를 만들고 각 노드를 서로 연결하는 방식이다. 노드 클래스public class Node { Object item; Node next;}노드 클래스는 내부에 저장할 데이터인 item 과, 다음으로 연결할 노드의 참조인 next 를 가진다.이 노드 클래스를 사용해서 데이터 A, B, C를 순서대로 연결해보자.public class Node { Obje..
[Java 복습] 직접 구현해보는 ArrayList 자료 구조배열과 같이 여러 데이터(자료)를 구조화해서 다루는 것을 자료구조라 한다.자바는 배열 뿐만 아니라, 컬렉션 프레임워크라는 이름으로 다양한 자료 구조를 제공하고 있다.  배열의 특징배열에서 자료를 찾을 때 인덱스(index)를 사용하면 매우 빠르게 자료를 찾을 수 있다.인덱스를 통한 입력, 변경, 조회의 경우 한번의 계산으로 자료의 위치를 찾을 수 있다.배열은 메모리상에 순서대로 붙어서 존재한다. 공식: 배열의 시작 참조 + (자료의 크기 * 인덱스 위치)arr[0]: x100 + (4byte * 0): x100arr[1]: x100 + (4byte * 1): x104arr[2]: x100 + (4byte * 2): x108배열의 경우 인덱스를 사용하면 한번의 계산으로 매우 효율적으로 자료의 위치..
[Java 복습] 와일드 카드 목차와일드 카드와일드 카드 실행순서제네릭 메서드 vs 와일드 카드상한, 하한 제한타입 이레이저 와일드 카드이번에는 제네릭 타입을 조금 더 편리하게 사용할 수 있는 와일드 카드(wildcard)에 대해 알아보자. 참고로 와일드카드라는 뜻은 컴퓨터 프로그래밍에서 * , ? 와 같이 하나 이상의 문자들을 상징하는 특수 문자를 뜻한다.  쉽게 이야기해서 여러 타입이 들어올 수 있다는 뜻이다.public class Box { private T value; public void set(T value) { this.value = value; } public T get() { return value; }}public class WildcardEx { static..
[Java 복습] 제네릭 메서드 목차제네릭 메서드제네릭 메서드 활용제네릭 타입과 제네릭 메서드 우선순위 이번에는 특정 메서드에 제네릭을 적용하는 제네릭 메서드에 대해 알아보자!제네릭 타입과 지금부터 살펴볼 제네릭 메서드는 둘다 제네릭을 사용하긴 하지만 서로 다른 기능을 제공한다.public class GenericMethod { public static Object objMethod(Object obj) { System.out.println("Object Print = " + obj); return obj; } public static T genericMethod(T t) { System.out.println("generic Print = " + t); return t;..
[Java 복습] 제네릭이 필요한 이유!! 목차제네릭이 필요한 이유제네릭 적용제네릭 용어와 관례원시 타입제네릭 활용 예제  public class IntegerBox { private Integer value; public void set(Integer value) { this.value = value; } public Integer get() { return value; }}public class StringBox { private String value; public void set(String value) { this.value = value; } public String get() { return value; }}public class..
[Java 복습] Clendar 클래스 날짜와 시간java.util.Date날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK 1.0)Date의 메서드는 거의 deprecated 되었지만, 여전히 쓰이고 있다. java.util.CalendarDate 클래스를 개선한 새로운 클래스(JDK 1.1)여전히 단점이 존재 java.time 패키지Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공(JDK 1.8)LocalDate, LocalTime, LocalDateTime 세분화해서 클래스를 나눔불변으로 처리해야 함 Calendar 클래스추상 클래스이므로 getInstance( )를 통해 구현된 객체를 얻어야 한다.Calendar cal = new Calendar(); // 에러!! 추상클래스는 인스턴스를 생성할 수 없다.// OK, ..
[Java 복습] 래퍼(wrapper) 클래스 래퍼 클래스기본형 값을 감싸는 클래스8개의 기본형을 객체로 다뤄야할 때 사용하는 클래스 객체지향언어 => 모든 것이 객체성능 때문에 기본형을 만들었다!!public class Ex1 { public static void main(String[] args) { Integer i = new Integer(100); Integer i2 = new Integer(100); //Integer i3 = Integer.valueOf(100); System.out.println("i1 == i2 ?" + (i == i2)); System.out.println("i.equals(i2) ? " + i.equals(i2)); System.out..
[Java 복습] String 클래스, StringBuffer, StringBuilder String 클래스 데이터(char[ ]) + 메서드(문자열 관련)내용을 변경할 수 없는 불변 클래스String a = "a"; // x001 => x003String b = "b"; // x002a = a + b; // 새로운 문자열 "ab", x003 주소가 a로 대입문자열 결합을 할 때마다 새로운 주소값이 만들어지니 성능이 떨어짐!덧셈 연산자(+) 를 이용한 문자열 결합은 성능이 떨어짐.문자열의 결합이나 변경이 잦다면, 내용을 변경가능한 StringBuffer를 사용. 문자열의 비교String str1 = "abc"; // 문자열 리터럴 "abc"의 주소가 str1에 저장됨String str2 = "abc"; // 문자열 리터럴 "abc"의 주소가 str2에 저장됨String str3 = new S..