Language & script/Java

    [Java] File

    1. 개요 2. File 클래스 생성자 3. File 클래스의 다양한 메서드 3.1. 파일의 디렉토리 목록을 보여주는 예제 3.2. 파일이름, 파일 크기, 파일의 읽기쓰기 가능 여부, 숨김파일인지 등 상세정보를 출력해주는 예제 4. File 조작 메서드 5. File I/O 5.1. FileInputStream 5.2. File, FileOutputStream, java.nio.file.Files 6. 참조 개요 Java에서는 File 클래스를 통해 파일과 디렉토리를 다룰 수 있도록 지원합니다. 또한 FileInputStream, FileOutputStream을 통해(혹은 File 클래스 자체에서도 지원) 파일입출력을 할 수 있습니다. 모든 파일은 0,1의 Byte로 이루어져 있기 때문에 Java에서 이..

    [Java] record

    recode의 등장 배경 java 14 버전부터 나온 기술입니다. 순수하게 데이터를 저장하기 위해 나온 클래스로써 Entity나 Dto 설계를 훨씬 간결하게 할 수 있습니다. public class Human { private final String name; private final String age; public Human (String name, String age) { this.name = name; this.age = age; } public String getName { return name; } public String getAge { return age; } } 평소 Entity를 작성한다고 하면 Java Bean 규약에 의해 이런식으로 작성할 것입니다. recode를 활용하면 위의 코드..

    [Java] Stream

    원하는 데이터를 좀 더 쉽게 뽑아내기 위해 나온 기술 약간 감싼다는 느낌 이거 하나로 정렬, 출력 등 다 가능 Stream의 등장 배경 많은 수의 데이터를 다룰 때 저희는 배열이나 Collection에 담아서 보관합니다. 이 중에서 원하는 데이터를 뽑아내기 위해서는 for문이나 Iterator를 사용하여 코드를 작성해왔습니다. 하지만 이는 너무 길고 알아보기 힘들고 재사용성이 떨어진다는 단점이 있었습니다. List list = Arrays.asList("자바", "파이썬", "스프링", "장고"); // for each문 for(String s : list) { System.out.println(s); } // Iterator 사용 Iterator iterator = list.iterator(); whi..

    [Java] Error& Exception

    Exception을 설정하여 Error가 나는 것 보다 먼저 Exception을 터트린다. Exception은 개발자가 임의로 설정할 수 있으므로 Error보다 Exception을 터뜨리자 특히 코드로 해결할 수 없다면 Unchecked Exception을 터뜨려 사용자가 처리할 수 있도록 하자 Error 오류와 Exception 예외의 차이 시스템 레벨에서 발생하는 오류입니다. 이로인해 시스템을 중단하고 종료해야 할 상황까지 오는 심각한 문제입니다. 개발자가 미리 예측할 수 없어 오류를 방지할 수 없습니다. 시스템 레벨에서 발생하는 오류와 달리 예외는 실수나 사용자의 영향에 의해 발생합니다. 개발자가 미리 예측할 수 있어 방지할 수 있습니다. 개발자는 오류보다는 예외처리에 집중해야합니다. 클래스 계층구..

    Heap & Garbage Collection

    Heap은 객체들을 저장하는 공간으로써 생존 기간에 따라 Young, Old 영역으로 나눠진다. GC는 이 Heap 영역의 Eden, Old 공간을 보며 처리한다. Minor GC는 Eden 영역을, Major GC는 Old 영역을 처리하며 각각 처리 시간은 약 10배정도 차이난다. Garbage Collection이란 유효하지 않은 메모리, 아무도 참조하지 않는, 쓰이지 않는 메모리를 Garbage라 합니다. C언어에서는 free()를 이용해 직접 메모리를 해제합니다. 하지만 JVM 위에서 돌아가는 java, Kotlin같은 경우 JVM의 Garbage Collector가 알아서 정리해줍니다. # System.gc()를 이용해 직접 호출할 수 있지만 시스템 성능에 큰 영향을 미쳐 호출하면 안된다고 합니..

    Java

    객체지향 객체지향에 관하여 static instance constructor, this class, instance inheritance, interface, package this, super overriding, overloading interface polymorphism Java 추가기능 Annotation Bytecode 조작 미완성 Auto Boxing & Auto Unboxing Casting JVM (Memory) JVM, JRE, JDK Compiler Class Loader Runtime Data Area Runtime Data Area - Stack Runtime Data Area - Method Area Heap & Garbage Collector Execution Engine Ca..

    [Wrapper Class] String

    String은 "문자열 리터럴 초기화", "new 객체 초기화" 두가지 방식이 있다. String은 불변으로 생성되었기 때문에 수정할 수 없다. 대신 새로운 객체가 생성된다. 반복적으로 생성하고 싶을 땐 StringBuilder, StringBuffer를 사용하자 String 객체 특징 C/C++에서는 문자열을 char의 배열로 다룹니다. 하지만 Java에서는 java.lang 안에있는 String클래스의 객체로 다룹니다. 자바의 다른 클래스와는 달리 String 클래스는 문자열 리터럴을 직접 String 변수에 대입할 수 있습니다. 문자열은 많은 프로그램 상에서 자주 사용하기 때문에 String의 처리 효율이 얼마나 좋은지가 가장 중요합니다. 알다시피 자바는 객체는 Heap영역에 저장하고 primiti..

    Thread

    하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위이다. 운영체제에서의 Thread를 다루고 Java에서는 어떻게 JVM에 올려서 Thread를 관리하는지 아는게 포인트 Thread 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위입니다. 컴퓨터구조와 운영체제를 다룰 때 집중적으로 다루겠습니다. 여기서는 Java에서 Thread를 어떻게 다루는지를 중점으로 포스팅하겠습니다. JVM에서 Heap과 Stack과 Method Area의 이해가 있어야 합니다. 한개의 쓰레드에서 Heap과 Stack을 전부 사용하는 것 보다 여러개의 쓰레드에서 작업하는 것이 효율적일 수 있습니다. Thread Memory 구조 그림과 같이 3개의 Thread로 나눠지게 되면 stack, PC registe..

    Synchronization & Intrinstic Lock

    동기화 Synchronization 멀티 쓰레딩 환경에서 한개의 쓰레드 작업을 할 때 다른 쓰레드와 조화롭게 동작함을 의미합니다. 즉, 쓰레드가 관여할 경우 다른 쓰레드는 실행을 잠시 멈추는 것을 잘 해야 함을 의미합니다. 만일 한 쓰레드 작동 중 다른 쓰레드의 값을 바꿀려고 하면 원하지 않는 동작이 이루어질 수 있습니다. DB의 트랜잭션 개념이라 생각하면 될 것 같습니다. 고유 락 Intrinstic Lock 자바의 모든 객체는 lock을 가지고 있습니다. 고유 락을 이용해 동시성 문제를 해결하는 방식이 바로 synchronized 블록입니다. synchronized block 이 블럭이 있는 코드가 하나의 쓰레드만이 실행됩니다. synchronized(잠글 객체) { // 하나의 쓰레드만 처리되는 영..

    Casting

    "형변환" 입니다. int a = 0.1; int b = (int) true; 첫번쨰 같은 경우 0.1은 double형이지만, int로 저장이 충분히 가능합니다. 두번째 같은 경우에는 true는 int형이 될 수 없습니다. 정확히는 int형이 될 정보를 가지고 있지 않다고 표현합니다. 활용 자바에서는 단순히 기본 타입끼리 Casting하는 것을 넘어 객체끼리 Casting합니다. 객체지향 언어의 장점인 다형성과 상속을 이 Casting을 통해 사용할 수 있습니다. 종류 묵시적 형변환 캐스팅이 자동으로 발생합니다. 부모의 속성을 포함하고 있기 때문에 자식 객체에 형변환을 표시할 필요가 없습니다. 이를 업캐스팅이라고 합니다. Parent p = new Child(); 명시적 형변환 부모 객체보다 더 큰 자식..