본문 바로가기

Java

(10)
[Java] I/O에 대한 공부 (1/2) I/OInput과 Output의 약자로 데이터의 입출력을 의미한다. 문자 인코딩데이터를 다른 형식으로 변환하는 과정이다.문자 디코딩인코딩 된 데이터를 원래 형식으로 복원하는 과정이다.인코딩, 디코딩을 하는 이유컴퓨터가 이해할 수 있도록 데이터를 Byte 형식으로 변경한다. 따라서 파일을 작성하려면 Byte 형식으로 변경해야 한다. 그리고 컴퓨터가 이해하는 언어는 사람이 보고 이해하기 어렵다. 따라서 디코딩을 하여 사람들이 보고 이해하는 언어로 변경한다.InputStream위 코드에 주석을 읽어 보면 "이 추상 클래스는 바이트 입력 스트림을 나타내는 모든 클래스의 슈퍼클래스 이다. InputStream의 하위 클래스를 정의해야 하는 애플리케이션은 항상 입력의 다음 바이트를 반환하는 메서드를 제공한다."이다..
[Java] 스레드, 멀티스레드에 대한 공부 스레드 프로세스 내에서 실행되는 실행 단위이다. 이전 글을 보면 더 쉽게 알 수 있다.멀티 스레드한 프로세스 내에서 여러 스레드가 실행 단위를 나누어 실행되는 것을 의미한다.  자바 프로그램을 돌리면서 1개의 스레드만으로 여러 작업을 동시에 할 수 없다. 이에 자바에서는 여러 스레드를 만들어 실행시키는 방식으로 발전해 왔다. 이를 멀티 스레드라고 한다.스레드의 상태스레드는 여러 가지 상태를 가지고 있다. New : 스레드 객체가 생성되었지만, start() 메서드가 호출되지 않은 상태이다.Runnable : 스레드가 실행 중이거나 실행될 준비가 된 상태이다.Blocked : 스레드가 락을 기다리는 상태이다.Waiting : 스레드가 다른 스레드의 특정 작업이 완료되기를 기다리는 상태이다.Timed Wai..
[Java] 제네릭에 대한 공부 제네릭을 공부하기 전에 다형성에 대해서 알아야 한다. 다형성에 대해서 모른다면 이 글을 참고 하도록 하자.이제 다형성을 알고 있다고 생각하고 제네릭에 대해서 설명하겠다. 제네릭이란?클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다.이렇게만 보면 이게 무슨 소리지? 또는 어떻게 이게 가능하지?라는 생각을 하게 된다. ArrayList list=new ArrayList();위 코드를 보면 Integer을 감싸고있는 가 사용한 클래스를 제네릭 클래스라고 한다. public class ExGeneric{ private T t; public void setT(T t){ this.t=t; } public T getT(){ return t; }}다..
[Java] 예외처리에 대한 공부 예외(Exception)란 개발자가 구현한 로직에서 발새한 실수나 사용자의 영향에 의해 발생한다. 오류와 달리 미리 예측이 가능하여 상황에 맞게 예외처리를 해야 한다. 오류(Error)란 시스템이 종료되어야 할 수준의 상황과 같이 수습할 수 없는 심각한 문제를 의미한다. 미리 예측이 불가능하여 방지할 수 없다. 예외 계층체크 예외애플링케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다. Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. RuntimeException을 제외한 모든 예외는 체크예외이다. 언체크 예외(런타임 예외)컴파일러가 체크하지 않는 언체크 예외이다. RuntimeException과 하위 언체크 예외를 모두 런타임 예외라고 한다. 예외 처리 란? 예기치 ..
[Java] 다형성에 대한 공부 다형성(Polymorphism)어떤 객체가 속성이나 기능이 상황에 따라 여러 가지 형태로 변할 수 있는 것을 의미한다. 클래스가 상속 관계에 있을 때 나타나는 성질이다.public class Car { public void carMethod(){ System.out.println("자동차입니다."); }}public class OilCar extends Car{ public void oilCarMethod(){ System.out.println("기름차입니다."); }}위 코드는 OilCar가 Car를 상속하는 코드이다.public class PloyMain { public static void main(String[] args) { Sys..
[Java] 상속과 구현에 대한 공부 상속 관계객체 지향 프로그래밍의 핵심 요소 중 하나로, 기존 클래스의 메서드를 새로운 클래스에서 재사용하게 해 준다.extends 키워드를 사용하며 하나의 대상만 선택할 수 있다.  부모 클래스상속을 통해 자신의 필드와 메서드를 다른 클래스에 제공하는 클래스public class Animals { public void sound(){ System.out.println("소리를 냅니다."); }} 자식 클래스부모 클래스로부터 필드와 메서드를 상속받는 클래스public class Eagle extends Animals { public void fly(){ System.out.println("날아 갑니다."); }}eagle이 Animals를 상속받는다.publi..
[Java] Garbage Collector 대한 공부 Garbage Collector프로그램이 동적으로 할당했던 메모리 영역(Heap) 중 사용하지 않는 영역을 탐지하여 해제하는 기능이다.public class Main{ public static void main(String[] args){ User user=new User("홍길동","20") user=new User("김철수","25") }}위 코드를 보면 user는 처음에 User 객체가 생성되고 '홍길동'을 참조하고 있다. 하지만 다음줄이 실행되면서 '김철수'를 참조한다. 이때 참조하지 않는 '홍길동'이 GC의 대상이 된다.  GC에 과정으로 Mark and Sweep 있다. 처음에는 GC가 Stack의 모든 변수를 스캔하면서 객체가 참조하고 있는 변수를 Marking..
[Java] JVM의 Heap, Stack구조에 대한 공부 자바 메모리 구조에 대한 공부를 하면서 Heap과 Stack 영역에 대하여 간단하게 지나갔는데 이번 글을 통해서 자세하게 공부해 보자위 그림(Runtime Data Area 영역)에서 JVM stack과 Heap의 대해 공부하겠다.Heap영역1. 프로그램을 실행하면서 생성한 모든 객체가 저장된다.2. 주기적으로 GC가 제거하는 영역이다.위 그림은 자바 7 이전과 8 이후의 JVM 구조이다. 위 그림처럼 Heap은 영역이 나누어지는데 이는 GC이 Heap을 효율적으로 삭제하기 위해서 3가지 영역으로 나누어진다. New/Young 생명 주기가 짧은 객체를 GC 대상으로 하는 영역 Edennew를 통해서 생성된 객체가 위치한다. 정기적인 GC후 살아남은 객체들은 Survivor로 이동한다.survivor1 /..