Language/Java
-
Java - InputStream & OutputStreamLanguage/Java 2023. 3. 21. 16:57
InputStream & OutputStream 데이터 입출력 프로그램에서는 데이터를 외부에서 읽고 다시 외부로 출력하는 작업이 빈번하게 일어난다. 데이터는 사용자로부터 키보드, 마우스 등을 통해 입력될 수도 있고, 파일 또는 네트워크를 통해 입력될 수도 있다. 또 반대로 데이터를 사용자에게 모니터나 파일 등으로 출력할 수도 있다. 자바 입출력과 스트림 자바에서 데이터는 스트림을 통해 입출력된다. 스트림은 단일 방향으로 연속적으로 흘러가는 것을 말하는데 물이 높은 곳에서 낮은 곳으로 흐르듯이 데이터도 출발지에서 나와 도착지로 흘러간다는 개념이다. 프로그램이 출발지냐 또는 도착지냐에 따라서 스트림의 종류가 결정된다. 프로그램이 데이터를 입력받을 때에는 입력 스트림(InputStream)이라고 부르며, 데이..
-
Java - 제네릭(Generic)의 제한 - extends, super, ?Language/Java 2022. 12. 28. 14:57
제네릭(Generic)의 제한 - extends, super, ? 개요 이전 게시글에서는 제네릭의 가장 일반적인 사용법과 특성에 대해서 알아보았다. 예를 들어, 타입을 T라고 하고 외부에서 Integer로 지정하면 T는 Integer가 되고, String으로 지정하면 T는 String이 된다. 만약, Student 클래스를 만들고 T를 Student를 지정한다면 T는 Student가 된다. 즉, 제네릭은 이 처럼 참조 타입 모두가 될 수 있다. 만약, 이러한 T를 특정 범위 내로 좁혀서 제한하고 싶다면 어떻게 해야 할까? 이때 필요한 것이 바로 extends, super, ?이다. extends와 super이라는 키워드는 많이 보았을 것이다. ?는 와일드카드라고 해서 쉽게 말해 알 수 없는 타입이라는 의..
-
Java - 제네릭(Generic)의 특성Language/Java 2022. 12. 28. 09:50
제네릭(Generic)의 특성 복수의 제네릭 사용 class EmployeeInfo { public int rank; EmployeeInfo(int rank) { this.rank = rank }; } class Person { public T info; public S id; Person (T info, S id) { this.info = info; this.id = id; } } public class GenericDemo { public static void main(String[] args) { Person p = new Person(new EmployeeInfo(1), 1); } } 클래스 내에서는 여러 개의 제네릭을 필요로 하는 경우가 있을 것이다. 위 코드는 이러한 경우의 예이다. 위 코드는..
-
Java - 제네릭(Generic)을 사용하는 이유Language/Java 2022. 12. 27. 17:26
제네릭(Generic)을 사용하는 이유 제네릭을 사용하지 않을 경우의 문제점 - 타입 안전성 class StudentInfo { public int grade; public StudentInfo(int grade) { this.grade = grade; } } class StudentPerson { public StudentInfo studentInfo; public StudentPerson(StudentInfo studentInfo) { this.studentInfo = studentInfo; } } class EmployeeInfo { public int rank; public EmployeeInfo(int rank) { this.rank = rank; } } class EmployeePerson {..
-
Java - 제네릭(Generic)이란?Language/Java 2022. 12. 27. 16:31
제네릭이란? 제네릭이란? 제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 특정 클래스를 인스턴스화 할때, 구체적인 데이터 타입을 언급하는 방식이다. 제네릭의 사용 class Person { public T info; } public class GenericDemo { public static void main(String[] args) { Person p01 = new Person(); Person p02 = new Person(); } } 제네릭 타입의 Person 클래스를 생성한 후, 서로 다른 타입으로 인스턴스를 생성하였다. 각각의 인스턴스를 생성할 때, 사이에 어떠한 데이터 타입을 사용했느냐에 따라 다른 데이터 타입을 가진 인스턴스를 생성할 수 있..
-
Java - 스트림(Stream) 최종 처리 메서드의 종류와 사용 방법(3)Language/Java 2022. 12. 1. 16:03
스트림(Stream) 최종 처리 메서드의 종류와 사용 방법(3) 요소를 그룹핑해서 수집 저번 시간에는 그룹핑을 제외한 스트림의 수집 방식에 대해 알아보았다. 이번 게시글에서는 collect() 메서드를 이용해서 그룹핑하는 방법을 알아보겠다. collect() 메서드는 단순히 요소를 수집하는 기능 이외에 컬렉션의 요소들을 그룹핑해서 Map 객체를 생성하는 기능도 제공한다. 여기서 collect() 메서드를 호출할 때 매개 변수로 groupingBy() 또는 groupingByConcurrent() 메서드를 사용하면 된다. 첫 번째는 매개변수로 Function classifier를 사용하는 groupingBy() 메서드이다. 이 메서드의 리턴 타입을 보면, Collector로, T를 K로 매핑한 후, 키가 ..