공부/java 39

IO 와 NIO 를 이용한 입출력 (2/2)

NIO자바 4에서 새롭게 등장하고 7에서 재정비된 NIO 는 IO 와 비교해 여러 강점을 가진다. 1. MMIO(Merory-Mapped IO) 방식으로 버퍼 지원2. 넌블로킹 모드 지원3. Scatter/Gather 지원4. 파일락 이전 포스팅에 1,2,3, 의 내용이 정리되어 있다. 파일락의 경우, 어떤 파일을 수정하는 동안 다른 쓰레드에서 읽기 작업을 가능하게 할지 설정하는 기술이다. MMIO일반적으로 I/O 작업이 이뤄질때, 이를 위한 별도의 메모리 공간이 할당된다. 문제는 I/O 작업이 일어날 때마다 이 별도의 메모리 공간(자바에서는 Heap)을 사용하기 위한 시스템콜이 일어나고, 이 작업이 상당한 자원을 소모한다는 것이다.이 문제를 해결하기 위해 운영체제는 MMIO 라는 기술을 지원한다.mmi..

공부/java 2024.05.17

IO 와 NIO 를 이용한 입출력 (1/2)

자바에는 입출력을 위한 I/O API 존재한다.I/O 클래스는 두개가 존재하는데, 기존 I/O 와 자바4에 등장해서 자바 7에 재정리된 버퍼를 사용하는 New I/O 다. 버퍼버퍼에 대해 쉽게 이해하기 위해 먼저 마트에서 장을 본다고 가정해보자. 살 물건을 하나씩 계산대로 가지고 가기 보다는, 바구니에 담아서 한번에 가져가는 것이 이동시간도 적게 걸리고 힘도 덜 들 것이다. 버퍼는 바로 이 바구니와 비슷한 역할을 한다. 즉, 데이터를 다루기 전 일정 크기만큼 한번에 가져와 가지고 있는 저장소다. 덕분에 데이터를 사용하기 위해 매번 데이터를 찾으러 갈 필요가 없어 실행 시간이 빨라진다는 장점이 있다. 기본 I/O 클래스를 이용한 버퍼코드로 살펴보기에 앞서 일부 세팅이 필요하다.1. 더미 파일 생성파워쉘에서..

공부/java 2024.05.13

자바 - Junit5 Jupiter 를 이용한 단위 테스트 시작

1. 프로젝트의 main 폴더 아래에 test 폴더를 만든다. test 폴더 내부에 테스트 클래스를 만들지 않으면 정상적으로 junit 클래스를 import 해올수 없어 테스트 코드를 실행할수 없다. 2. @Test 어노테이션을 이용한 테스트 코드 메서드 작성 @Test void test(){ } 해당 어노테이션이 붙은 메서드는 main 클래스처럼 실행이 가능해진다. main 클래스가 그렇듯, 반환값은 존재하지 않는다. **** 만약 @Test 어노테이션의 import 클래스가 org.junit.jupiter.api.Test 가 아니라면 라이브러리를 추가해야 한다. gradle의 경우 다음의 코드를 작성해줘야 한다. dependencies { testImplementation 'org.junit.jupi..

공부/java 2024.04.03

자바(java)의 생성자 함수

생성자 함수 (Constructor) : 객체 생성시 자동으로 호출되는 함수 형식 public 클래스이름() { } - 다른 함수들과 달리 int나 String처럼 반환형식 지정을 안함. //클래스에서 중요한 개념들 //1.상속 : 모듈화/계층화, 중복제거 //2.생성자함수 : 객체생성시 자동으로 호출되는 함수 //3.다형성 : 상속관계에서 하나의 객체가 여러 타입을 가질수 있다. // : B클래스가 A클래스를 상속했다면, 타입을 B타입,A타입 // 2개 다 타입으로 가질 수 있다. //4.추상화 클래스 : 일반 클래스(일반 함수) + 가상함수 //5.인터페이스 : 인터페이스 타입에 가상함수만 있는 것 //생성자 함수 : Constructor // : 객체생성시(new) 자동으로 호출되는 함수 // 용도..

공부/java 2023.01.23

자바(java)의 클래스 상속

클래스의 상속 10개의 클래스를 만든다고 가정하자. 그 모든 클래스에 똑같은 변수와 함수가 3개씩 있다고 할때, 우리는 총 30번을 중복되는 똑같은 코드를 작성하게 된다. 이처럼 기존에 있는 클래스에서 변수와 함수를 사용하고자 할때, 또는 중복되는 변수와 함수를 하나로 통일하고자 할때, 상속을 이용할수 있다. 클래스의 상속: 클래스 내부의 매소드와 속성(변수)들을 자신의 것처럼 사용가능하게 하는 것 상속의 이점: 코드 중복을 피한다. 계층적인 코드 작성이 가능하다. 상속의 형식 class (자식 클래스) extend (부모클래스) //클래스의 상속 //상속 : 부모의 자산을 자녀가 물려받는 것 //클래스의 상속 : 부모클래스의 자산(함수/변수)를 자녀클래스가 물려받는다. //물려받는다 : 접근권한을 갖는..

공부/java 2023.01.23

자바(java)의 싱글톤 패턴

싱글톤 만들기 싱글톤은 프로그램 안에 유일한 객체를 말한다. 마치 nft코인처럼, 클래스로 만든 객체가 단 하나만 존재하는 객체인 것이다. 만드는 법은 다음과 같다. class UniqueOne{ int no = 1; private static UniqueOnesingleton= new UniqueOne(); static UniqueOne getInstance(){ returnsingleton; } } 이는 하나의 공식과도 같다. 일단 명령어 하나하나 살펴보자. 싱글톤 클래스의 no속성에 10을 부여했다. 그리고 클래스 안에서, 자기 클래스를 객체화 했다. 이때 private 예약어를 써서 캡슐화, 즉, 쉽게 접근 할수 없게 만드는 은닉화를 했고, 이어서 static 예약어를 통해 고정된 메모리 주소값에..

공부/java 2023.01.23

자바(java)의 오버로딩(Overloading)

메소드 오버로딩(Overloading) - 메소드 확장 매개변수의 타입과 갯수를 다르게 함으로서 함수의 기능을 확장하는 것을 말한다. 이를 사용하면 함수를 계속 만들지 않고, 기존에 있는 함수의 매개변수를 달리함으로서 계속 사용 가능하다. static void echo() { //메아리처럼 콘솔에 출력해주는 함수 System.out.println("echo"); } static void echo(int param){ System.out.println("echo:"+param); } 위의 함수를 생각해보자. 함수의 이름이 똑같으나, 밑의 함수는 pram이라는 매개변수를 갖는다. echo(); echo( 10 ); 출력값: 홍길동 홍길동:10 이 기능을 통해 우리는 println에 문자열형과 정수형, 실수형..

공부/java 2023.01.23

자바(java)의 정렬 알고리즘(버블, 선택, 삽입)

정렬 알고리즘. 기초적인 방법 : 버블정렬, 선택정렬, 삽입정렬 ***Array.sort()함수는 듀얼피봇 퀵정렬이라는 방식을 사용함. 가장 빠르고 효율적이지만 너무 어려운 내용이라 그냥 넘어간다. 버블정렬 가장 비효율적이지만 만들기 쉽고 간단해서 많이 쓰인다. 인덱스 0 부터 인덱스 끝까지 대/소를 비교하고, 만약 상대가 더 크거나 작다면 자신과 데이터를 교환하는 방식. 교환하고도 계속 비교 하지만, 이때도 기준은 인덱스다. 예를 들어보자. 배열 a[ ]를 오름차순으로 정리하고 있다. a[2]의 값을 a[3], a[4] ... a[n]까지 계속 비교하는 도중, a[10]이 자신보다 더 작다는 것을 발견했다. 그럼 이어서 a[2]의 데이터와 a[10]의 데이터를 맞교환한다. 그리고 이어서 바뀐 a[2]를..

공부/java 2023.01.23

자바(java)의 열거형 표현

열거형 열거형: 함수 밖, 클래스 안에서 선언하는 형식 어떤 값을 1이나 2처럼 숫자로 정의하기보다, 문자로 값을 정의하면 가독성이 향상되는 경우 사용한다. 다만 거의 쓰이지 않는다. 예) 문자 야구게임: 0== 스크라이크 1== 볼 변경 전) if( ball == 0 ) => 스트라이크 변경 후) if( ball == Ball.Strike ) 형식 enum 열거형이름 { 상수1, 상수2, ... } //; 을 안쓴다. 순서에 맞추서 정수값이 부여된다. // 정수값 0 1 2 enum Hero { Ironman, Superman, Batman } enum SRP { Sissors, Rock, Paper } enum Ball { Strike, Ball } 열거형 타입을 정수로 출력하고 싶으면 ordinal..

공부/java 2023.01.23

자바(java)의 배열

배열(Array) 만들기 배열은 데이터 나열이 하나로 묶어 연속된 메모리 주소에 저장하는 것이다. 파이썬의 인덱스와 같은 개념. 같은 타입의 데이터를 연속된 공간에 나열한 뒤, 각 데이터에 순차적으로 인덱스를 부여해 다루기 쉽게 만든 데이터 구조다. 만약 1,2,3,4,...10의 숫자가 있다고 가정 하면, 이것을 하나 하나 새로운 변수에 할당하는 대신 10칸으로 나눠진 하나의 통에 넣는거라고 생각하면 된다. 정수형, 문자형 데이터 모두 배열형으로 표현할 수 있지만, 타입이 다른 두 데이터를 하나의 배열에 넣는 것은 불가능하다. 정수형 배열 1. 선언과 동시에 초기화. int[] arrayNum1 = { 10, 20, 30 }; System.out.println( arrayNum1[0] ); //인덱스 ..

공부/java 2023.01.23