목록Backend/Java (44)
elevne's Study Note

I/O 란 Input, Output 의 약자로, 컴퓨너 내부 또는 외부의 장치와 프로그램간의 데이터를 주고받는 입출력을 뜻하는 것이다. Java 에서, 어는 한 쪽에서 다른 쪽으로 데이터를 전달하기 위해서는 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데 이를 Stream 이라고 한다. Stream 은 단방향통신만 가능하기 때문에 하나의 Stream 으로 입력과 출력을 동시에 처리할 수는 없고, 입출력을 동시에 수행하기 위해서는 Input Stream, Output Stream 두 개가 전부 필요하다. 이러한 Stream 은 먼저 보낸 데이터를 먼저 받게 되어있으며, queue 와 같은 FIFO 의 구조로 되어있다고 볼 수 있다. Stream 의 종류들은 아래와 같은 것들이 있다. Inpu..

java.util.Optional 클래스는 Integer, Double, Boolean 등의 클래스들처럼 'T' 타입의 객체를 포장해주는 wrapper 클래스이다. Optional 인스턴스는 모든 타입의 참조변수를 저장할 수 있는 것이다. Optional 객체를 사용하여 예상치못한 NullPointerException 문제를 회피할 수 있다. 조건문을 사용하지 않고도 null 값으로 인해 발생하는 문제들에 대한 예외를 처리할 수 있는 것이다. Optional 객체는 of( ) 혹은 ofNullable( ) 메서드를 사용하여 생성한다. public class Main { public static void main(String[] args){ Optional opt1 = Optional.ofNullable(..

Lambda 표현식이란 메서드를 하나의 식으로 표현한 것으로, JS 에서 자주 사용하는 화살표 함수와 비슷한 형태를 띄고 있다. ( () -> {} 의 형태로 적는 것) 이러한 람다 표현식은 메서드의 매개변수로 전달되기도, 메서드의 결과값으로 반환되기도 한다. 람다의 규칙은 아래와 같다. 매개변수의 타입을 추론할 수 있는 경우에는 타입을 생략할 수 있다. 매개변수가 하나인 경우에는 괄호를 생략할 수 있다. 함수의 몸체가 하나의 명령문만으로 이루어진 경우에는 중괄호를 생략할 수 있다. (이 때 세미콜론을 붙이지 않는다) 함수의 몸체가 하나의 return 문으로만 이루어진 경우에는 중괄호를 생략할 수 없다. return 문 대신 표현식을 사용할 수 있으며, 이 때 반환값은 표현식의 결과값이 된다. (이 때 ..

Serialization (직렬화) 을 사용하여 객체를 컴퓨터에 저장, 네트워크를 통해 컴퓨터 간 주고받는 것이 가능해진다. 직렬화란 객체를 데이터 스트림으로 만드는 것을 뜻한다. 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것이다. (반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화 (Deserialization) 라고 한다) 객체를 저장한다는 것은 객체의 모든 인스턴스 변수의 값을 저장한다는 것과 같은 의미가 되는 것이다. 또, 저장했던 객체를 다시 생성하는 것은, 객체를 생성한 후에 저장했던 값을 읽어서 생성한 객체의 인스턴스 변수에 저장하면 되는 것이다. 이러한 직렬화와 역직렬화의 과정에서 ObjectInputStream, ObjectOutputStream..

Comparator 과 Comparable 은 모두 인터페이스로, 객체들을 정렬 또는 Binary Search Tree 를 구성하는데 필요한 메서드를 정의한다. Comparable 을 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스들, 주로 Integer 과 같은 wrapper 클래스 (Boolean 제외) 와 String, Date, File 과 같은 것들이며 기본적으로 오름차순으로 정렬되도록 구현되어 있다. 즉, Comparable 을 구현한 클래스는 정렬이 가능하다는 것이다. 이전 Collection framework 에서 알아보았던 TreeSet 또한 Comparable 을 구현한 내용에 따라서 자료들이 정렬되는 것이다. 만약 Comparable 을 구현하지 않은 클..

Generics 는 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입 체크를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. (간단히 말하자면 다룰 객체의 타입을 미리 명시해줌으로써 형 변환을 하지 않아도 되게 하는 것) 제네릭스에서는 Reference Type (참조형타입), 간단히 말해 Type 을 의미하는 기호로 'T' 를 사용한다. (어떠한 참조형 타입도 가능하다는 것을 의미) 'T' 외에도 element 의 첫 문자인 'E', key 를 의미하는 'K', value 를 의미하는 'V', number 을 의미하는 'N' 도 사용된다. 이들은 모두 기호의 종류만 다를 뿐 '임의의 참조형 타입' 을 의미한다..

Collection framework 란 다수의 데이터를 저장하는 클래스들을 표준화한 설계를 뜻한다. 이는 다수의 데이터를 다루는데 필요한 다양한 클래스들을 제공하기 때문에 매우 유용하며, 인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있어서 사용법을 익히기에도 편리하고 재사용성이 높은 코드를 작성할 수 있다는 장점이 있다고 한다. Collection framework 에서는 컬렉션을 크게 3 가지 타입이 존재한다고 인식하고, 각 컬렉션을 다루는데 필요한 기능을 3 개의 인터페이스로 분리하였다. Interface 특징 List 순서가 있는 데이터의 집합. 데이터 중복 허용 e.g., ArrayList, LinkedList, Stack, Vector, etc... Set 순서를 유지하지 않..

java.lang 패키지는 자바의 가장 기본이 되는 클래스들을 포함하며, 해당 클래스들은 import 없이 사용할 수 있도록 되어있다. java.lang 패키지의 주요 클래스들을 살펴보았다. 🤗 Object Class Object 클래스는 모든 클래스의 최고 조상으로, Object Class 의 멤버들은 모든 클래스에서 바로 사용 가능하다. Object 클래스에는 멤버변수는 없고, 오직 11 개의 메서드만 갖고있다. 1. equals( ) 매개변수로 객체의 참조변수를 받아서, 두 객체의 같고 다름을 비교하여 그 결과를 boolean 값으로 알려주는 역할을 한다. 서로 다른 두 객체를 equals 메서드로 비교하면 항상 false 를 결과로 얻게된다. (객체를 생성할 때, 메모리의 빈 공간을 찾아 생성하므..