1) 데이터 입출력
데이터 입출력은 프로그램과 외부 환경 또는 다른 프로그램 간에 데이터를 읽고 쓰는 과정을 말합니다. 데이터 입출력은 다양한 형식과 방식으로 이루어질 수 있습니다. 아래에는 일반적으로 사용되는 몇 가지 데이터 입출력 방법을 설명하겠습니다.
- 콘솔 입출력(Console I/O): 콘솔은 프로그램과 사용자 간에 텍스트 기반으로 데이터를 주고 받는 인터페이스입니다. 표준 입력(System.in)을 통해 사용자로부터 입력을 받을 수 있고, 표준 출력(System.out)을 통해 결과를 화면에 출력할 수 있습니다. Java에서는 System.in, System.out을 사용하여 콘솔 입출력을 수행할 수 있습니다. C에서는 scanf, printf 함수를 사용하여 콘솔 입출력을 처리할 수 있습니다.
- 파일 입출력(File I/O): 파일은 영구적인 데이터 저장소로 사용됩니다. 프로그램은 파일에서 데이터를 읽거나 파일에 데이터를 쓰는 것이 가능합니다. 파일 입출력은 프로그래밍 언어에 따라 다양한 방식으로 처리됩니다. Java에서는 FileInputStream, FileOutputStream, BufferedReader, BufferedWriter 등의 클래스를 사용하여 파일 입출력을 처리할 수 있습니다. C에서는 fopen, fread, fwrite, fprintf, fscanf 등의 함수를 사용하여 파일 입출력을 처리할 수 있습니다.
- 네트워크 입출력(Network I/O): 네트워크 입출력은 프로그램 간에 네트워크를 통해 데이터를 주고 받는 것을 의미합니다. 클라이언트-서버 모델이 가장 일반적인 형태입니다. 클라이언트는 서버로 요청을 보내고, 서버는 해당 요청을 처리한 결과를 클라이언트에게 전달합니다. 네트워크 입출력은 소켓(Socket) 프로그래밍을 통해 처리됩니다. Java에서는 Socket 및 ServerSocket 클래스를 사용하여 네트워크 입출력을 처리할 수 있습니다.
- 데이터베이스 입출력(Database I/O): 데이터베이스는 구조화된 데이터를 저장하고 관리하는 시스템입니다. 프로그램은 데이터베이스에 연결하여 데이터를 조회, 삽입, 수정, 삭제하는 작업을 수행할 수 있습니다. 데이터베이스 입출력은 해당하는 데이터베이스 시스템에 특화된 API나 쿼리 언어를 사용하여 처리됩니다. Java에서는 JDBC(Java Database Connectivity)를 사용하여 데이터베이스 입출력을 처리할 수 있습니다
데이터 입출력은 프로그램의 요구사항과 데이터의 형식에 따라 다양한 방식으로 처리됩니다. 예를 들어, 텍스트 파일이나 CSV 파일과 같은 구조화되지 않은 데이터를 처리해야 할 때는 문자열을 읽고 쓰는 방식으로 데이터 입출력을 수행할 수 있습니다. 이 경우에는 텍스트 파일을 한 줄씩 읽거나 쓰는 방식으로 데이터를 처리할 수 있습니다.
또한, 직렬화(Serialization)와 역직렬화(Deserialization)를 통해 객체를 파일 또는 네트워크를 통해 입출력할 수도 있습니다. 직렬화는 객체를 바이트 스트림으로 변환하여 저장하거나 전송하기 위한 과정이며, 역직렬화는 바이트 스트림으로부터 객체를 복원하는 과정입니다. 이를 통해 객체 단위로 데이터를 입출력할 수 있습니다.
데이터 입출력은 프로그램이 다양한 환경과 시스템과 상호작용하며 데이터를 주고 받을 수 있도록 합니다. 이를 통해 데이터를 읽어와서 프로그램에서 처리하거나, 프로그램에서 생성된 데이터를 외부로 출력할 수 있습니다. 데이터 입출력은 프로그램의 유연성과 확장성을 높이는 데 중요한 역할을 합니다.
노드 스트림(Node Stream):
- 데이터의 출발지 또는 목적지에 직접 연결되는 스트림입니다.
- 데이터를 읽어들이거나 쓰는 기능을 제공합니다.
- 주로 파일(FileInputStream, FileOutputStream)이나 바이트 배열(ByteArrayInputStream, ByteArrayOutputStream), 문자열(StringReader, StringWriter) 등의 데이터 소스에 사용됩니다.
- 바이트 단위(InputStream, OutputStream) 또는 문자 단위(Reader, Writer)로 데이터를 처리할 수 있습니다.
필터 스트림(Filter Stream):
- 다른 스트림에 연결되어 데이터를 변환, 필터링 또는 추가적인 기능을 제공하는 스트림입니다.
- 기본 스트림 또는 다른 필터 스트림에 연결하여 사용됩니다.
- 데이터를 처리하는 중간 단계에서 추가적인 기능을 수행할 수 있습니다. 예를 들어, 버퍼링(BufferedInputStream, BufferedOutputStream), 압축(GZIPOutputStream), 객체 직렬화(ObjectInputStream, ObjectOutputStream) 등의 기능을 제공합니다.
- 필터 스트림은 노드 스트림 또는 다른 필터 스트림에 연결되어 사용됩니다.
요약:
- 노드 스트림은 데이터의 출발지 또는 목적지에 직접 연결되는 기본적인 스트림입니다.
- 필터 스트림은 다른 스트림에 연결되어 데이터 변환, 필터링 또는 추가적인 기능을 제공하는 스트림입니다.
- 노드 스트림은 데이터를 읽고 쓰는 기본적인 기능을 제공하며, 필터 스트림은 추가적인 기능을 수행합니다.
- 필터 스트림은 노드 스트림이나 다른 필터 스트림에 연결하여 사용됩니다.
1번째는 값을 읽을 수 있지만.
2번째 3번째는 double타입으로 쓰고 long타입으로 읽었기 때문에 값이 깨짐.
이렇게(데이터 타입별로 쓰는) 하는 이유? 데이터의 구조를 알고 있는 사람들만 읽기 위해서 사용한다
객체 직렬화
객체 역직렬화
객체 직렬화(Serialization)와 역직렬화(Deserialization)는 자바에서 객체를 바이트 스트림으로 변환하거나 바이트 스트림에서 객체로 복원하는 과정을 말합니다. 이를 통해 객체를 파일에 저장하거나 네트워크를 통해 전송할 수 있습니다. 객체 직렬화와 역직렬화는 주로 Serializable 인터페이스를 구현한 클래스를 대상으로 수행됩니다.
객체 직렬화는 다음과 같은 이점을 제공합니다:
- 객체의 상태를 영속적으로 저장: 직렬화를 통해 객체의 상태를 바이트 스트림으로 저장하여 나중에 복원할 수 있습니다. 이를 통해 프로그램을 종료하고 다시 시작해도 객체의 상태를 그대로 유지할 수 있습니다.
- 네트워크 통신: 객체 직렬화를 사용하면 객체를 네트워크를 통해 전송할 수 있습니다. 객체를 직렬화하여 바이트 스트림으로 변환한 후, 전송한 곳에서 역직렬화하여 원래의 객체로 복원할 수 있습니다.
- 객체의 깊은 복사: 객체 직렬화를 통해 객체를 복사할 수 있습니다. 직렬화된 객체를 다시 역직렬화하면 새로운 객체가 생성되며, 이는 원본 객체와 동일한 상태를 가지게 됩니다.
자바에서 객체 직렬화와 역직렬화를 수행하려면 다음과 같은 단계를 따릅니다:
- 직렬화 가능한 클래스 생성: 직렬화하려는 클래스는 Serializable 인터페이스를 구현해야 합니다. 이 인터페이스는 구현해야 할 메서드가 없으며, 단지 직렬화 가능한 클래스임을 나타냅니다.
- 객체 직렬화: ObjectOutputStream을 사용하여 객체를 직렬화합니다. writeObject() 메서드를 호출하여 객체를 바이트 스트림으로 변환합니다.
- 객체 역직렬화: ObjectInputStream을 사용하여 바이트 스트림을 읽고, readObject() 메서드를 호출하여 바이트 스트림을 객체로 복원합니다.
2) next() 와 nextLine() 차이점
(예시)
"서울시 중구 광화문로"
nextLine() 반환되는 값: 서울시 중구 광화문로
next() 반환되는 값: 서울시
'JAVA 수업 > java 수업 기록' 카테고리의 다른 글
0609 수업 내용 (0) | 2023.06.09 |
---|---|
0608 수업 내용 (2) | 2023.06.08 |
인터페이스의 세계로~~ (2) | 2023.06.05 |
0602 수업 내용 (0) | 2023.06.02 |
코드 분석 (0) | 2023.06.01 |