Immutable Object(불변 객체) 및 final 사용 이유
Immutable Object(불변 객체)란 객체 생성 이후 내부의 상태가 변하지 않는 객체를 뜻 한다. read-only 메소드만 제공하며, 객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사(defensive-copy)를 제공한다. 대표적으로 String 객체가 있다. String name = "old"; name.toCharA...
Immutable Object(불변 객체)란 객체 생성 이후 내부의 상태가 변하지 않는 객체를 뜻 한다. read-only 메소드만 제공하며, 객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사(defensive-copy)를 제공한다. 대표적으로 String 객체가 있다. String name = "old"; name.toCharA...
자바의 가장 기본적인 자료구조인 ArrayList를 구현해보자. 실제 Java에서 지원하 ArrayList의 경우 구현된 메소드가 30개 이상이라 모두 구현하기는 어렵고, 필수적인 메소드만 구현해보자. 앞서 만든 List 인터페이스를 implements 하여 구체적으로 구현해보자. ArrayList는 다른 자료구조와 달리 Object[] 배열(객...
배열하고 List 인터페이스에서 지원하는 클래스(ex) ArrayList, LinkedList)의 공통점과 차이점이 무엇인지 간단하게 알아보자. [공통점] 동일한 특성의 데이터들을 묶는다. 반복문(loop)내에 변수를 이용하여 하나의 묶음 데이터들을 모두 접근할 수 있다. [차이점 - 배열] 처음 선언한 배열의 크기(길이)는 변...
자료구조는 Data Structure 라고 불리고, 데이터 구조, 자세히 말하면 ‘일련의 일정 타입들의 데이터 모임 또는 관계를 나타낸 구성체’ 라고 할 수 있다. 알고리즘 문제를 풀어낼 때 우리가 효율적으로 문제를 풀어내기 위해서는 자료구조을 선택하는 것이 중요하다. 보통 알고리즘 문제를 해석하고 그 해석에 맞는 알고리즘을 선택하는게 보통이다. ...
자바의 문자열을 다루는 자료형으로는 대표적으로 3가지가 있다. String, StringBuffer, StringBuilder 이다. 대부분 문자열에 대해 이야기할 때 String만을 취급하지만, 사용 목적에 따라 더 적합한 문자열 자료형이 있다. 위 3가지 자료형의 차이점에 대해 알아보고, 어떤 상황에 어떤 자료형이 좋은지 알아보자. 위 ...
String 클래스에 대해 공부를 했다면 String이 String Constant Pool 이라고 불리는 String 상수풀에 저장된다는 것을 알 것이다. 하지만 String Constant Pool과 Constant Pool이 용어가 비슷해 혼용해 헷갈리는 경우가 많은데, 명백히 다른 저장공간이다. 심지어 Constant Pool은 JVM-Me...
기본적으로 Comparable과 Comparator는 모두 인터페이스(Interface)다. 즉, Comparable과 Comparator 모두 인터페이스 내에 선언된 메소드를 ‘반드시 구현’ 해야한다. 그럼 어떤 메소드를 구현해야 하는지 각 API문서를 뒤져보자. Comparable 인터페이스에는 compareTo(T o) 메소드가 하나 선언 ...
상속이란 상속이란 한 마디로 자식이 부모의 특징을 물려 받는 것이다. 예를 들어, 사람이라는 큰 카테고리가 있다면 그 아래 학생, 직장인 등으로 나눌 수 있을 것이다. 이때, 자바에서는 사람 = 부모 클래스, 그 아래 학생, 직장인 = 자식 클래스라고 정의한다. 위에서 상속이란 자식이 부모의 특징을 물려 받는다고 했는데 그건 어떤 의미일까? ...
abstract(추상) class란? 추상 클래스란, 추상 메서드를 선언해 놓고 상속을 통해 자식 클래스에서 메서드를 완성하도록 유도하는 클래스이다. 즉, 자식(서브) 클래스에서 반드시 재정의 해야할 필요가 있는 메서드의 경우 부모(수퍼) 클래스에서 추상 메서드로 만드는 것이다. 이러한 특성 때문에, 미완성 설계도라고 불리기도 한다. 추상 클래스...
제네릭(Generic)이란 ‘데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입을 가질 수 있도록 하는 방법’ 입니다. 우리가 흔히 쓰는 ArrayList, LinkedList 등을 생성할 때, 객체 객체명 = new 객체 (); 과 같이 쓰인다. ArrayList<Integer> list1 = new ArrayList...