Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

히바리 쿄야 와 함께 하는 Developer Cafe

[5일차] DO IT 자바프로그래밍/ 351~561 / 11 Object 클래스 ~ 15 자바 입출력 본문

Java

[5일차] DO IT 자바프로그래밍/ 351~561 / 11 Object 클래스 ~ 15 자바 입출력

TWICE&GFRIEND 2020. 12. 23. 15:14

object 클래스는 자바 java.lang 패키지에 속하고 있습니다 가장 많이 사용하는 기본클래스 모든 자바 클래스의

최상위 계층에 속한다.

 

toString() : 객체의 해시코드값을 출력

getClass().getName() + '@' + Integer.toHexString(hashCode())

 

equals() : '==' 연산 결과 반환  두 인스턴스가 동일한지 여부의 판단 논리적으로 override 할 수 있음 

 

 

 

서로 다른 인스턴스를 가르키기 때문에 false 값으로 리턴된다.

 

 

hashCode() : JVM 가상머신이 부여한 코드 값, 인스턴스가 저장된 가상머신의 주소를 10진수로 변환한다.

오버라이드를 하는 이유는 서로 다른 메모리에 위치한 객체가 동일성을 갖기 위해서 

 

 

 

Class 객체 얻을때 getClass(). forName()  메소드를 사용해서 class 객체를 얻을 수 있다. 

보통 forName() -> 메소드를 사용할때 주로 JDBC 이용해서 데이터베이스 쿼리에 입력된 값을 불러올때 많이 

사용한다.

 

 

Vector
ArrayList와 동일한 구조를 갖는다. 차이점이라면 Vector는 자동 동기화를 보장하므로 
멀티 스레드 환경에서 안정적으로 사용이 가능하다. 하지만 단일 스레드에서는 ArrayList가 성능이 더 좋다. 
Vector를 생성하는 방법은 다음과 같다.
List<E> list = new Vector<e>([초기용량,</e> 증가용량]);
초기용량과 증가용량을 생략하면 기본 값인 0으로 설정된다. 

 

Set
Set은 List와는 다르게 객체(데이터)를 중복해서 저장할 수 없다. 또한 저장된 객체(데이터)를 인덱스로 관리하지 않기 때문에 저장 순서가 보장되지 않는다. 
수학의 집합과 비슷한 내용이다. Set 컬렉션을 구현하는 대표적인 클래스들은 HashSet, TreeSet, LinkedHashSet 등이 있다.
Set 컬렉션을 구현하는 클래스들이 공통적으로 사용하는 주요 메소드는 add, iterator, size, remove, clear 등이 있다.

 

Set은 인덱스로 객체를 관리하지 않기 때문에 데이터를 검색하기 위해서는 iterator() 메서드로 Iterator(반복자)를 생성하고 데이터를 가져와야 한다. 
HashSet은 Set 컬렉션을 구현하는 대표적인 클래스이다. 데이터를 중복 저장할 수 없고 순서를 보장하지 않는다.

 

Set<E> 객체명 = new HashSet<E>();

 

예외처리 코드 및 실행 순서(Try-Catch-Finally)
이제 자바 Exception 개념 및 종류에 대해 알아봤으니 예외 처리코드에 대해서 알아보겠습니다.
예외 처리 코드 Try - Catch - Finally
앞서 말했듯이 예외 처리 코드는 갑작스러운 예외 Exeption 발생으로 인해 시스템 및 프로그램이 불능상태에 빠지지 않고 시스템 및 프로그램이 정상실행 되도록 유지시켜 줍니다.

Try 블록 : 실제 코드가 들어가는 곳으로써 예외 Exeption이 발생할 가능성이 있는 코드
Catch 블록 : Try 블록에서 Exeption이 발생하면 코드 실행 순서가 Catch 쪽으로 오게됨. 즉 예외에 대한 후 처리 코드
Finally 블록 : Try 블록에서의 Exeption과 발생 유무와 상관 없이 무조건 수행되는 코드 (옵션이라 생략이 가능)

Exeption 발생!

Try 블록 수행 -> Catch 블록 수행 -> Finally 블록 수행 (생략가능)

Exeption 미발생!

Try 블록 수행 -> Finally 블록 수행 (생략가능)

아울러, 예외 처리 코드는 예외 종류(일반예외, 실행예외)에 따라 예외 처리 코드 (Try-Catch-Finally)의 강제여부가 갈린다! 다시 말해, 컴파일시 예외 검사 대상이 되는 일반예외는 예외 처리 코드에 반드시 감싸서 코드를 짜야합니다.. 
반면 프로그램 실행이후 발생하는 실행예외는 따로 컴파일러가 예외 처리 코드를 강제하라고 하지 않기 때문에 온전히 개발자의 경험에 의해서 예외 처리 코드를 사용해야합니다.
이것은 굉장히 중요하다. 컴파일러가 실행예외를 컴파일 시점에 판단하여 검사할 수 없기 때문에 개발자가 실행예외가 발생할 가능성이 있는 코드에 예외 처리 코드를 적용해줘야 합니다.
즉, 개발자의 역량에 따라 실행 예외를 잘 막기도하고, 못 막기도 합니다. 이는 시스템의 안정성에도 영향을 주게 되는 것이지요. 또한 이는 다른 의미에서 일반예외보다 실행예외가 예외발생 시 더 치명적입니다. 
아무튼! 우리가 알아야 할 것은 일반예외와 달리 실행예외는 컴파일러가 따로 체크해주지 않으니 알아서 예외 처리 코드를 사용해야 한다는 것!!

실행예외 : NullPointerException 

(NullPointerException : 실제 참조할 대상이 null인데 참조하려고 할때 발생하는 예외)

 

array가 null인데 객체 참조를 시도하면서 발생하는 그 유명한...NullPointerException 입니다.

위 코드가 수행이 가능한 이유는 컴파일 할 때 컴파일러가 따로 예외 처리 코드를 사용하라고 강제하지 않았고 개발자가 null 참조를 수행한다는 것을 놓쳤기 때문에 가능했습니다. 결국..실행 예외가 발생하였고 이를 방어할 예외 처리 코드를 적용하지 않았기 때문에 11번 줄에 있는 println은 찍히지 않았다. 프로그램이 그전에 죽어버린 것!

 

스트림 (Stream)

Stream은 컴퓨터와 네트워크, 컴퓨터와 주변장치(키보드, 마우스, 모니터, 프린터, 스마트폰 등)간 데이터 통신을 하는 통로입니다. 스트림은 아래와 같은 특성이 있습니다.

스트림은 데이터 송수신의 통로로, Input/Output의 기본이 됨

단방향 통신을 제공 하기 때문에 입력, 출력 두개의 스트림이 필요

스트림은 연속된 데이터 흐름으로 입출력 처리시 다른 작업을 할 수 없는 블로킹 상태

스트림은 문자스트림과 바이트스트림으로 구분



문자스트림

Reader <- BuffredReader, InputStreamReader <- FileReader

Writer <- BufferedWriter, OutputStreamWriter <- FileWriter



바이트스트림

InputStream <- ObjectInputStream, FileInputStream <- DataInputStream, BuffredInputStream

OutputStream <- ObjectOutputSream, FileOutputStream <- DataOutputStream, BufferedOutputStream


컴퓨터에서 파일은 매우 중요한 입출력 대상입니다. 컴퓨터의 램(RAM) 메모리는 휘발성으로 컴퓨터의 전원이 꺼지면 메모리 상의 모든 데이터는 사라집니다. 하지만, 
컴퓨터를 이용하다 보면 게임의 세이브 데이터, 보고서 작성 데이터, 채팅이나 문자 메시지 등 컴퓨터를 종료 하더라도 지워지면 안되는 데이터들이 있습니다. 이처럼 '파일'은 컴퓨터의 메모리 한계를 벗어나 데이터를 저장하고 공유하는 중요한 수단입니다.

File

- 파일은 컴퓨터 디스크에 텍스스타 바이너리 형태로 저장하기 위해 고안됨

- 텍스트 파일은 프로그램 소스나 메모장에서 작성한 단순 정보를 기록하는 것이 목적

- 바이너리 파일은 이진 형태로 저장 되며 프로그램 실행 파일이나 프로그램에서 저장하는 데이터 파일

Directory

- 대용량 파일을 관리하기 위해 고안됨, '폴더' 라고도 지칭

- 디스크 시스템의 최상위를 루트(ROOT)라 하며, 파일은 루트를 비롯한 하위 디렉토리에 들어 있음


Path

- 경로(Path)는 디스크 시스템에서 파일의 위치를 관리한느 체계

- 파일을 처리 하기 위해서는 파일의 위치 정보가 필요하고, 파일과 디렉토리는 위치를 표현하기 위해 사용됨

- 유닉스 계열은 '/' 윈도우 계열은 '₩'를 구분자로 사용

파일 입출력
컴퓨터에서 파일은 매우 중요한 입출력 대상입니다. 컴퓨터의 램(RAM) 메모리는 휘발성으로 컴퓨터의 전원이 꺼지면 메모리 상의 모든 데이터는 사라집니다.
 하지만, 컴퓨터를 이용하다 보면 게임의 세이브 데이터, 보고서 작성 데이터, 채팅이나 문자 메시지 등 컴퓨터를 종료 하더라도 지워지면 안되는 데이터들이 있습니다. 
이처럼 '파일'은 컴퓨터의 메모리 한계를 벗어나 데이터를 저장하고 공유하는 중요한 수단입니다.



File 관련 주요 클래스

- File : 경로 정보를 바탕으로 해당 파일 객체를 생성
- FileReader : 파일에서 문자 스트림을 기반으로 한 입력을 처리하는 클래스
- FileWriter : 파일에서 문자 스트림을 기반으로 한 출력을 처리하는 클래스
- FileInputStream : 파일에서 바이트 스트림을 기반으로 한 입력을 처리하는 클래스
- FileIOutputStream : 파일에서 바이트 스트림을 기반으로 한 출력을 처리하는 클래스

 

 

파일은 컴퓨터에서 가장 기본이 되며 중요한 입출력 대상
File 클래스는 바이트 스트림과 문자 스트림을 모두 지원
File을 다루기 위해서는 File 객체를 생성하고, 보조 스트림이 필요
서버마다 디렉터리 구분자가 다르니 유의하여 사용 (유닉스 '/' 윈도우 '₩')

Comments