Do it! 알고리즘 입문: 자바 편 (25)[책리뷰 & Book review]
본문 바로가기

컴퓨터공부/책리뷰 & book review

Do it! 알고리즘 입문: 자바 편 (25)[책리뷰 & Book review]

by Life & study 2024. 2. 5.
반응형

 

 

 

System.in
InputStreamReader
BufferedReader
각각에 대해서

BufferedReader, InputStreamReader, System.in의 각 구성요소에 대해 설명하겠습니다.

System.in: 이것은 자바의 표준 입력 스트림으로, 사용자로부터의 입력을 받습니다. 기본적으로 바이트 단위로 데이터를 읽습니다.
InputStreamReader: 바이트 스트림인 System.in을 문자 스트림으로 변환하는 브리지 역할을 합니다. 즉, 입력된 바이트 데이터를 JVM에 맞는 문자 데이터로 변환합니다. 이 변환은 JVM의 문자 인코딩에 따라 달라집니다.
BufferedReader: 문자 스트림을 받아 이를 버퍼에 저장해 놓고, readLine()과 같은 메서드를 통해 한 번에 한 줄씩 읽을 수 있게 합니다. 이렇게 버퍼를 활용하면 대량의 데이터를 빠르게 읽을 수 있습니다.
이를 도식화하면 아래와 같습니다:

(System.in)
    |
    v
(InputStreamReader)
    |
    v
(BufferedReader) -> readLine() -> "입력된 문자열"


자바 코드로는 다음과 같이 표현할 수 있습니다:

java

// 1. InputStreamReader 생성
InputStreamReader isr = new InputStreamReader(System.in);

// 2. BufferedReader 생성
BufferedReader br = new BufferedReader(isr);



// 3. 한 줄 읽기

String line = br.readLine(); // 예를 들어, 사용자가 "안녕하세요"를 입력했다고 가정합니다.


위 코드에서 System.in을 통해 사용자로부터 입력을 받아, 이를 InputStreamReader를 통해 문자로 변환합니다. 이후, BufferedReader를 통해 변환된 문자 데이터를 한 줄 읽어옵니다. 이때, BufferedReader는 내부적인 버퍼를 사용하여 데이터를 읽어 들이므로, 대량의 데이터를 빠르게 읽어 들일 수 있습니다.




 

public final class System { } 에서
System은 뭐여?

System은 자바 표준 라이브러리의 일부로 제공되는 클래스입니다. 이 클래스는 자바 가상 머신(JVM)과 관련된 여러 기능을 제공하지만, JVM 자체가 아닙니다.

System 클래스는 시스템 관련 기능을 제공하는 여러 정적 메서드와 필드를 포함하고 있습니다. 예를 들어, 표준 입출력 스트림(System.in, System.out, System.err), 현재 시간을 얻는 기능(System.currentTimeMillis()), 배열 복사 기능(System.arraycopy()), 시스템 프로퍼티 조회 기능(System.getProperty()) 등이 있습니다.

이런 의미에서 System 클래스는 JVM과 상호작용하는 인터페이스 역할을 수행한다고 볼 수 있습니다. 하지만 System 클래스 자체는 JVM을 구현하는 것이 아니라, JVM과의 상호작용을 돕는 도구라는 점을 기억해야 합니다.

 

 

 

 

 

 

java 8에 기본적으로 적용되는  인터페이스의 종류는 무엇이냐?

 

자바 8에는 여러 가지의 인터페이스가 포함되어 있습니다. 그중 몇 가지를 나열해 보면:

java.util.Collection: 컬렉션 프레임워크에서 모든 컬렉션 데이터 구조의 루트 인터페이스입니다.
java.lang.Comparable: 객체를 서로 비교할 수 있는 기능을 제공하는 인터페이스입니다.
java.lang.Runnable: 다중 스레드를 구현하는 데 사용되는 인터페이스입니다.
java.io.Serializable: 객체를 직렬화할 수 있는 기능을 제공하는 인터페이스입니다.
java.util.Iterator: 컬렉션 요소를 순회하는 기능을 제공하는 인터페이스입니다.
java.util.List: 순서가 있는 컬렉션을 나타내는 인터페이스입니다.
java.util.Map: 키-값 쌍을 저장하는 데이터 구조를 나타내는 인터페이스입니다.
java.util.Set: 중복 없는 요소를 가진 컬렉션을 나타내는 인터페이스입니다.
java.util.function.Predicate: 논리적 조건을 테스트하는 데 사용되는 인터페이스입니다.
java.util.function.Function: 한 타입의 값을 다른 타입의 값으로 매핑하는 함수를 나타내는 인터페이스입니다.
java.util.stream.Stream: 연속된 요소들의 시퀀스를 나타내는 인터페이스입니다.
java.util.Comparator: 두 객체를 비교하는 데 사용되는 인터페이스입니다.

 

위에 나열된 인터페이스들은 자바 8의 일부로 제공되며, 다양한 기능을 제공합니다. 이 외에도 많은 수의 인터페이스들이 자바 API에 포함되어 있습니다.

 

 

 

 

 

 

스트팀과 람다의 역할과 서블릿의 역할은 뭐야?

 

HTML 입력 처리: 클라이언트가 웹 페이지에서 양식을 제출하면, 이 정보는 HTTP 요청의 일부로 서버에 전송됩니다 5. 서블릿은 이 요청을 받아 처리하며, 요청에 포함된 데이터를 추출하여 사용합니다 2.

데이터 처리: 서블릿은 요청 데이터를 처리하고, 필요한 경우 데이터베이스와 같은 백엔드 시스템과 상호작용합니다 2. 이 과정에서 람다와 스트림이 사용될 수 있습니다. 예를 들어, 람다를 사용하여 데이터를 변환하거나, 스트림을 사용하여 데이터를 필터링하고 정렬하는 등의 작업을 수행할 수 있습니다 67.

HTML 출력 생성: 데이터 처리가 완료되면, 서블릿은 결과를 클라이언트에게 반환하기 위해 HTML을 생성합니다 2. 이때 JSP가 사용될 수 있습니다. 서블릿은 처리된 데이터를 JSP에 전달하고, JSP는 이 데이터를 사용하여 동적인 HTML을 생성합니다 1.


@Controller 영역

서블릿: 서블릿은 웹 서버에서 실행되는 자바 프로그램으로, 클라이언트의 요청을 처리하고 결과를 반환합니다 12. 서블릿은 HTTP 요청을 받아 처리하고, 필요한 경우 데이터베이스와 같은 백엔드 시스템과 상호작용합니다 1. 이 과정에서 데이터를 조회, 수정, 추가, 삭제 등의 작업을 수행할 수 있습니다 1.

 

@Controller
@RequestMapping("/fruits")
public class FruitController {

    @Autowired
    private FruitService fruitService;

    @GetMapping
    public String list(Model model) {
        List<String> fruits = fruitService.findAll();
        model.addAttribute("fruits", fruits);
        return "fruits/list";
    }
}

 


@Service  영역
람다: 람다는 자바 8에서 도입된 기능으로, 이름 없는 함수를 정의하고 사용할 수 있게 해 줍니다 34. 람다는 데이터 변환, 필터링, 정렬 등의 작업을 수행하는 데 사용될 수 있습니다 3.

스트림: 스트림은 자바 8에서 도입된 기능으로, 데이터를 효율적으로 처리할 수 있는 방법을 제공합니다 34. 스트림은 데이터를 필터링하고, 변환하고, 정렬하고, 집계하는 등의 작업을 수행할 수 있습니다 3.

 

 

 

. nextToken()  에 대해서 

 

.nextToken() 메서드는 Java의 StringTokenizer 클래스에 있는 메서드입니다 1.

 이 메서드는 StringTokenizer의 다음 토큰을 반환합니다 1. 

 

토큰은 문자열을 구분하는 단위를 의미하며, StringTokenizer는 문자열을 특정 구분자를 기준으로 토큰으로 분리하는 데 사용됩니다 1.

다음은. nextToken() 메서드가 어떻게 작동하는지 보여주는 간단한 자바 코드 예제입니다:

Java

import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {
        String str = "Hello, World!";
        StringTokenizer st = new StringTokenizer(str, " ");

        while (st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        }
    }
}



위의 코드에서, StringTokenizer는 공백을 기준으로 

문자열 "Hello, World!"를 토큰으로 분리합니다. 

그런 다음,. nextToken() 메서드를 사용하여 각 토큰을 순서대로 출력합니다 1.

이 코드를 실행하면 다음과 같은 출력을 얻을 수 있습니다:

Hello,
World!


이렇게. nextToken() 메서드는 StringTokenizer의 다음 토큰을 반환하여, 문자열을 토큰 단위로 순차적으로 처리할 수 있게 합니다1.

그림으로 표현하면 다음과 같습니다:

"Hello, World!" -> StringTokenizer -> "Hello," -> "World!"



이렇게 .nextToken() 메소드는 StringTokenizer를 통해 문자열을 토큰 단위로 분리하고, 이를 순차적으로 처리하는 데 사용됩니다 1

 

 

 

반응형

댓글