얕은 복사(Shallow Copy)란? public class Human { String name; int age; public Human(){ } public Human(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 위와 같은 Human 클래스가 있다고 하자. 이 클래스를 다음과 같이 복사한 뒤 멤버 값을 변경해 보자. p..
직렬화(Serializaion)란? 역직렬화(Deserialization)란? 직렬화는 객체를 저장 가능한 상태(예를 들어 디스크에 파일 형태 등) 혹은 전송 가능한 상태(네트워크 상의 데이터 스트림 형태)로 변환하는 것을 뜻한다 - 위키백과 - 쉽게 말해 직렬화는 객체를 저장, 전송할 수 있는 특정 포맷 상태로 바꾸는 과정이라고 할 수 있다. 역직렬화는 말 그대로 직렬화의 반대이다. 즉, 특정 포맷 상태의 데이터를 다시 객체로 변환하는 것을 뜻한다. 데이터 직렬화 포맷 CSV, XML, JSON 형태의 직렬화 사람이 읽을 수 있다 저장 공간의 효율성이 상대적으로 떨어지고, 파싱 하는 시간이 오래 걸린다 주로 데이터의 양이 적을 때 사용한다 Binary 직렬화 사람이 읽을 수 없다 저장 공간의 효율성이 ..
추상클래스(Abstract Class)란? 추상 클래스(Abstract Class)는 추상 메서드를 선언해 놓고 상속을 통해 자식 클래스에서 메서드를 완성하도록 유도하는 클래스이다. 이러한 특성 탓에 미완성 설계도라고 표현하기도 한다. 추상클래스는 상속을 위한 클래스이기 때문에 따로 인스턴스를 생성할 수 없다. abstract class 클래스{ ... public abstract void 메서드(); } class 앞에 "abstract" 예약어를 붙여 해당 클래스가 추상 클래스임을 나타낸다. 또한 메서드도 abstract 예약어를 붙여 추상 메서드를 선언할 수 있다. 추상 클래스는 추상 메서드를 가지지 않아도 괜찮다. 다만, 추상 메서드를 하나라도 가진다면 그 클래스는 추상 클래스가 된다. 추상 메서..
JRE, JDK란? 처음 Java를 설치하려고 보니 JRE, JDK 등이 존재하는 것을 확인할 수 있다. 둘의 차이는 무엇일까? 참고) [JAVA] 자바(JAVA)란? 자바의 특징 자바(JAVA)란? 자바는 C언어에 객체 지향적 기능을 추가하여 만든 C++과 달리, 처음부터 객체 지향 언어로 개발된 프로그래밍 언어이다. 자바는 자바 가상 머신(JVM, Java Virtual Machine)을 사용하여 운 code-lab1.tistory.com [JAVA] JVM(Java Virtual Machine)이란? JVM(Java Virtual Machine)이란? JVM은 Java Virtual Machine, 즉 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. JVM은 OS와 Java 애플리케이션 사이의..
오류(error)와 예외(exception) 자바에서 오류(error)란 시스템이 종료되어야 할 수준의 수습하기 힘든 심각한 문제를 의미한다. 이러한 오류는 개발자가 미리 예측하여 처리하기 힘든 것이 대부분이기 때문에 오류에 대한 처리는 매우 힘들다. 반면 예외(exception)는 개발자가 구현한 로직에서 발생한 실수 혹은 사용자의 영향에 의해 발생하는 예측하고 방지할 수 있는 문제를 뜻한다. 따라서 자바 개발자는 예외 처리(Exception Handling)를 통해 예외를 원활하게 처리할 수 있어야 한다. 예외 처리(Exception Handling) 자바에서는 예외를 처리하기 위해 try / catch / finally 문을 사용할 수 있다. try{ // 예외를 처리하길 원하는 실행 코드; }ca..
제네릭(Generic)이란? 자바에서 ArrayList와 같이 꺽쇠 안에 클래스 타입이 명시되어있는 것을 확인할 수 있다. [그림 1]은 ArrayList의 내부이다. ArrayList처럼 'E'라고 표시된 것을 확인할 수 있다. ArrayList list = new ArrayList(); ArrayList list2 = new ArrayList(); 위와 같이 ArrayList에 저장할 타입을 Integer, String 등으로 지정할 수 있다. 이처럼 데이터의 타입을 일반화(Generalize)하는 것을 제네릭(Generic)이라고 할 수 있다. 이러한 제네릭은 클래스나 메서드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정할 수 있다. 따라서 컴파일 시에 미리 타입 검사(Type Check)를..
Map 컬렉션 클래스 JAVA의 Map 컬렉션 클래스는 Collection 인터페이스를 상속하진 않지만 Collection 자료구조를 이야기 할 때 빠지지 않는다. Map 클래스는 Map 인터페이스를 상속한다. Map 클래스는 중복을 허용하지 않는 Key 값과 그에 대응하는 중복이 허용되는 Value 값이 쌍을 이루어 저장되는 자료구조이다. 이때 Key 값은 Value를 찾기 위한 색인과 같은 역할을 한다. Map 클래스는 요소의 저장 순서를 유지하지 않는다. Key는 중복을 허용하지 않지만, Value는 중복을 허용한다. Map 대표적인 컬렉션 클래스 3가지에 대하여 알아보자. HashMap HashMap 클래스는 Map 클래스에서 가장 많이 사용되는 클래스 중 하나이다. HashMap 클래스는 해시 ..
Set 컬렉션 클래스 Set 컬렉션 클래스는 Set 인터페이스를 구현한 클래스이다. Set 컬렉션 클래스는 요소의 저장 순서를 유지하지 않고, 같은 요소의 중복 저장을 허용하지 않는다. 따라서 중복을 제거해야 하거나 저장 순서가 중요하지 않을 때 자주 사용되는 컬렉션 클래스이다. 이러한 Set 컬렉션 클래스에 속하는 대표적인 클래스는 다음과 같다. 1. HashSet 2. TreeSet 간단하게 이 두 가지 클래스에 대해 알아보자. HashSet 클래스 HashSet 클래스는 Set 컬렉션 클래스에서 가장 많이 사용되는 클래스이다. HashSet 클래스는 hash 알고리즘을 사용하여 검색 속도가 매우 빠르다. 이러한 HashSet 클래스는 내부적으로 HashMap 인스턴스를 이용하여 요소를 저장한다. H..
String 클래스는 불변이다 자바에는 String, StringBuffer, StringBuilder 클래스가 존재한다. 자바에서 String 클래스는 보통 불변(immutable)하다. 즉, 한 번 초기화되면 변하지 않는다. 혹자는 String 클래스도 변한다고 말하지만, 사실 그것은 변하는 게 아니라 새로 생성한 것뿐이다. 예를 들어, String 클래스의 concat() 메서드나 "+" 연산자를 이용해 문자열의 변화를 주더라도, 그것은 문자열이 변경됐다기보다는, 새로 생성한 것이라고 봐야 한다. 자세한 내용은 아래 게시글을 참조하면 좋다. [JAVA] 자바 String Constant Pool 이란?, String "=="와 equals의 차이 String Constant Pool이란? 아래와 같..
List 컬렉션 클래스 List 컬렉션 클래스는 List 인터페이스를 구현한 클래스이다. List 컬렉션 클래스는 객체를 순차적으로 저장한다. 객체를 인덱스로 관리하기 때문에 List 컬렉션에 객체를 추가하면 인덱스가 자동으로 부여된다. 이 인덱스를 이용해 객체를 검색하고 삽입, 삭제할 때 사용한다. 이러한 List 컬렉션은 요소의 저장 순서가 유지되고, 같은 요소의 중복 저장을 허용한다는 특징을 가진다. List 인터페이스에서 공통적으로 제공하는 주요 메서드는 다음과 같다. 메서드 설명 boolean add(E e) 해당 리스트(list)에 전달된 요소를 추가 void add(int index, E e) 해당 리스트의 특정 위치에 전달된 요소를 추가 void clear() 해당 리스트의 모든 요소를 제..