Back-end/Java Language 30

0. BufferedReader, BufferedWriter, Scanner, StirngTockenizer

1. 버퍼 버퍼란 특정 데이터를 한 곳에서 다른 곳으로 전송할 때 일시적으로 그 데이터를 보관하는 임시 메모리 영역이다. 입출력 속도를 향상하기 위해서 버퍼를 사용한다. - 버퍼를 이용한 입력 : BufferedReader - 버퍼를 이용한 출력 : BufferedWriter - 버퍼 Flush : 버퍼에 남아있는 데이터를 출력시키는 작업 2. BufferedReader 1) Scanner와 차이 Scanner는 띄어쓰기, 엔터 등을 경곗값으로 인식해서 따로 가공할 필요가 없어 사용하기에 편리하다. 그러나 BufferedReader는 엔터만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 데이터를 따로 가공해야 하는 경우가 많다. 그 대신 BufferedReader가 빠르다. (알고리즘 문..

X. GarbageCollection(가비지 컬렉션)

1. Garbage Collection(가비지 컬렉션)이란? JVM에서 가비지 컬렉터가 불필요한 메모리를 정리해 준다(메모리 누수 방지) 2. Minor GC와 Major GC JVM의 Heap영역은 처음 설계될 때 2가지를 전제로 설계되었다. 1. 대부분의 객체는 금방 접근 불가능 상태가 된다. 2. 오래된 객체에서 새로운 객체로의 참조는 아주 적게 존재한다. 즉, 객체는 대부분 일회성이 되며, 메모리에 오랫동안 남아있는 경우는 드문 것이다. 그렇기 때문에 객체의 생존 기간에 따라 물리적인 Heap 영역을 나누게 되었는데, 이에 따라 Young, Old 총 2가지 영역으로 설계되었다. (초기에는 Perm영역이 존재했지만, java8부터 제거됨) 1) Minor GC Young 영역( Young Gene..

입출력(I/O)

1.1 의미 : 입출력은 컴퓨터 내부 또는 외부의 장치와 프로그램 간의 데이터를 주고받는 것을 의미한다. 1.2 스트림 : 한쪽에서 다른 한쪽으로 데이터를 전달하려면 1. 두 대상을 연결하고, 2. 데이터를 전송할 수 있는 무언가가 필요한데 이를 스트림이라고 한다. 즉, 데이터를 운반하는 데 사용되는 연결 통로가 스트림인 것이다. 1.3 바이트기반 스트림 : 1) 입력 스트림 : FileInputStream(파일), ByteArrayInputStream(메모리), PipedInputStream(프로세스), AudioInputStream(오디오 장치) 2) 출력 스트림 : FileOutputStream, ByteArrayOutputStream, PipedOutputStream, AudioOutputStre..

private static final Logger LOGGER = LoggerFactory.getLogger(this.class);

"이렇게 써라!!" private final Logger logger = LoggerFactory.getLogger(this.getClass()); 1. 분석 1) static으로 선언한 이유 : static을 선언하면 클래스 변수로 객체 생성이 될 때마다 해당 객체를 매번 생성하지 않고 초기 클래스 로딩 시 한 번만 생성해서 사용하게 된다. 그러나, Spring에서는 객체를 굳이 싱글턴 형태로 디자인하지 않아도 객체를 싱글턴과 같이 한 번만 생성해서 사용하게 된다. 따라서 무조건적인 static을 선언해 Perm 영역의 공간을 소비하지는 말자. 또한, 직렬 화하는 것을 피할 수 있다. (Perm영역이란? Permanent Generation의 약자로 객체의 생명주기가 영구적일 것으로 생각되는 객체를 관..

JVM(Java Virtual Machine)?

1. JVM이란? JVM이란 Java Byte Code를 OS에 맞게 해석해주는 역할을 한다.(가상 머신이란 프로그램을 실행하기 위해 물리적인 머신과 유사한 머신을 소프트 웨어로 구현한 것을 뜻한다.) jvm의 역할은 java와 os사이에 중개자 역할을 수행하여 java가 os에 구애받지 않고 재사용을 가능하게 해 준다. 그리고 메모리 관리를 수행한다. 또한, jvm은 스택 기반의 가상 머신이다. (ARM 아키텍처 같은 하드웨어는 레지스터 기반) 1. Java compiler(javac)는. java 파일을. class라는 Java byte code로 변환시켜준다. ByteCode는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다. 이를 위해 JVM은 OS가 ByteCode를 이해할 수 있도록 해석..

함수의 호출 방법 : Call By Value와 Call By Reference

1. Call By Value : 인자로 받은 값을 복사하여 처리하는 방식 Call By Value에 의해 넘어온 값을 증가시켜도 원래의 값이 보존된다. 값을 복사하여 넘기기 때문에 메모리 사용량이 늘어난다. 2. Call By Reference 인자로 받은 값의 주소를 참조하여 직접 값에 영향을 주는 방식 값을 복사하지 않고 직접 참조하기 때문에 속도가 빠르다. 원래의 값에 영향을 주는 리스크가 존재한다. 3. Java 예제

접근 제어자(access modifier)

1. 의미 접근 제어자는 멤버 또는 클래스에 사용되어, 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 한다. 접근 제어자가 default임을 알리기 위해서 default를 붙이지는 않고, 클래스나 멤버 변수, 메서드, 생성자에 접근 제어자가 지정되어 있지 않으면, 접근 제어자가 defalut임을 뜻한다. 2. 사용 가능한 곳 - 접근 제어자가 사용될 수 있는 곳은 - 클래스, 멤버 변수, 메서드, 생성자이다. 1) private = 같은 클래스 내에서만 접근이 가능하다. 2) default = 같은 패키지 내에서만 접근이 가능하다. 3) protected = 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근이 가능하다. 4) public = 접근 제한이 전혀없다. ..

0. equals()와 hashcode()

1. equals() 매개변수로 객체의 참조 변수를 받아서 비교하여 그 결과를 boolean값으로 알려주는 역할을 함. Object클래스에 정의되어 있는 equals메서드의 내용은 아래와 같다. public boolean equals(Object obj){ return(this==obj); } 위 코드에서 알 수 있듯이 두 객체의 같고 다름을 참조 변수의 값으로 판단한다. 따라서 서로 다른 두 객체를 equals메서드로 비교하면 항상 false의 결과가 나온다. 1) 자바의 정석 p451 예제 확인 2) value라는 멤버 변수를 갖는 Value클래스를 정의하고, 두 개의 Value클래스의 인스턴스를 생성한 다음 equals메서드를 이용해서 두 인스턴스를 비교하면 equals 메서드는 주소 값으로 비교를..

0. 자바의 정석 ch6(객체지향 프로그래밍)

1. 객체와 인스턴스 클래스를 인스턴스화 한 것이 인스턴스(객체)이다. 객체의 구성요소로는 속성과 기능이 있으며 여기서 속성이란 멤버 변수를 의미하고 기능이란 메서드(함수)를 의미한다. Ex). Class Tv{ String color; Boolean power; ..... void power() {power =! power;} //껐다 켰다 true, false로 변경 가능 void channelUp() ....... } 2. 인스턴스의 생성과 사용 Tv t1 = new Tv(); Tv t2 = new Tv(); t2=t1; //t1이 저장하고 있는 값(주소)을 t2에 저장하면서 참조 변수 t2가 가리키는 인스턴스는 가비지 컬렉터에 의해 자동적으로 메모리에서 제거된다. t1. color = red; /..

0. Java-iterator에 관하여

1. 의미 : Iterator는 java CollectionFramework에 저장되어 있는 요소들을 읽어오는 방법을 표준화한 것이다. 대표적으로 Set,List,Map에서 iterator 기능 사용가능하다. 2. 기능 : Boolean hasNext() : 읽어올 요소가 남아있는지 확인하고 있으면 true, 없으면 false Object next() : hasNext()가 true이면 다음 요소를 읽어오게 하는 것이다. void remove() : next()로 읽어온 요소를 삭제한다. next()를 호출 한 다음에 remove()를 호출해야한다. 3. 사용예시 ex1) 표준 List list = new ArrayList(); Iterator it = list.iterator(); while(it.ha..