본문 바로가기

프로그래밍/Java

(21)
I/O I/O란? Input, Output의 약자로 입출력이라고도 한다. 키보드를 통해 입력을 받거나 System.out.println()과같이 화면에 출력하는 것들이 대표적인 예 Stream 자바에서 모든 입출력은 스트림을 통해 이루어 지는데 여기서의 스트림은 자바8의 스트림과는 다른 개념이다. 스트림은 단방향 통신만 가능하며 하나의 스트림으로 입력과 출력을 동시해 수행할 수 없다. 스트림은 먼저 보낸 데이터를 먼저 받게 되는 FIFO(First In First Out) 구조로 되어있다. NIO? JDK1.4부터 지원하게 된 NIO는 New Input Output의 약자로 채널과 버퍼를 사용하는 새로운 입출력을 지원하게 되었다. Buffer 읽고 쓰기가 가능한 메모리 영역으로 데이터를 다른 곳으로 전송하는 동..
junit5 @Nested 계층구조로 테스트코드 작성하기 Describe - Context - It 구조 BDD(Behaviour Driven Development)에서 테스트 코드를 작성하는 구조로 구조에 대한 설명은 BETTER SPECS에 자세히 설명이 되어있다. 키워드를 간단히 요약해보면 Describe: 테스트할 대상을 명시 Context: ~하면, ~할 때 같은 상황이나 조건을 명시 It: ~한다와 같은 대상이 해야 할 행동을 명시 내가 생각한 구조의 가장 큰 장점은 테스트를 계층적으로 작성하여 수행 결과를 파악하기 좋다는 점이다. 수행 결과가 보기 좋아서 자신이 놓친 경우를 찾기 쉽다. Junit5의 @Nested Junit5부터 @Nested를 사용하여 계층적으로 테스트 코드를 작성할 수 있다. 우선 @Nested를 사용하지 않고 간단한 계산기 ..
어노테이션 어노테이션 어노테이션이라는 말 자체는 주석이라는 뜻을 가지고 있다. 어노테이션은 JDK1.5부터 사용 가능하며 프로그래밍 언어에 영향을 미치지 않으면서 다른 프로그램에게 유용한 정보를 제공할 수 있다. 흔히 많이 사용하는 대표적인 어노테이션에는 @Override가 있는데 메소드 앞에만 붙일 수 있으며 메소드가 오버라이드 됐는지 검증을 하여 부모 클래스에 해당 메서드가 없다면 컴파일 오류를 발생시킨다. 메타 어노테이션 어노테이션을 정의하는 방법에 앞서 메타 어노테이션이라는것에 대해 알 필요가 있다. 어노테이션을 위한 어노테이션으로 어노테이션을 정의할 때 사용되는 어노테이션이다. @Target 어디에 적용할지를 지정할 때 사용하며 앞서 나왔던 @Override를 보면 메소드에 사용됨을 알 수 있다. 지정할 ..
junit5 사용하기 JUnit5란? JUnit은 자바에서 단위테스트를 제공하는 테스트 프레임워크로 테스트를 작성하고 실행할 수 있다. junit5는 공식 문서에서는 3가지의 서브 프로젝트의 모듈로 구성되어있다고 한다. JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage Platform JVM에서 테스트 프레임워크를 시작하기 위한 기초 역활 Jupiter Junit5에서 테스트를 작성과 확장을 위한 새로운 프로그래밍 모델과 확장 모델의 조합 Vintage 하위 버전(JUnit3, JUnit4)을 위한 테스트엔진제공 junit5은 런타임에는 Java 8이상 이 필요하나 이전 버전의 JDK로 컴파일된 코드는 테스트할 수 있다. 테스트 환경 확인 Ide: IntelliJ Idea..
Enum 클래스 Enum 열거형은 JDK1.5부터 추가되었으며 서로 관련 있는 상수를 편하게 선언하기 위해 사용할 수 있다. enum 정의하는 방법 열거형의 정의는 괄호 안에 상수의 이름을 나열하면 된다. enum 열거형이름 {상수명1, 상수명2,...} public enum Fare { BUS, TRAIN, AIRPLANE, SHIP } 사용할 때는 열거형이름.상수명으로 사용하면 된다. Fare.BUS 열거형에 상수값을 사용자가 지정하여 사용하고 싶을 때는 이름 옆에 소괄호를 사용하여 적어주면 되고 값을 저장할 변수와 생성자를 추가해야 한다. enum Fare { BUS(1200), TRAIN(10000), AIRPLANE(30000), SHIP(50000); private final int fare; Fare(int..
멀티쓰레드 프로그래밍 Thread 클래스와 Runnable 인터페이스 Thread 클래스와 RUnnable인터페이스를 알아보기 전에 프로세스와 쓰레드에 대해 알아보자 프로세스(process) OS로부터 메모리를 할당받아 실행중인 프로그램을 프로세스라고 한다. 프로그램에 사용되는 데이터와 메모리 쓰레드로 구성된다. 쓰레드(thread) 프로세스 내에서 실제로 작업을 수행하는 것으로 모든 프로세스는 하나 이상의 쓰레드를 가진다. 두 개 이상의 쓰레드를 가지는 프로세스는 멀티 쓰레드 프로세스라고 한다. 쓰레드의 구현 자바에서 쓰레드를 구현하는 방법에는 크게 두 가지가 있다. 1. Thread 클래스를 상속받아 구현 public class MyThread extends Thread { public void run() { //작업 S..
예외처리 예외처리 프로그램이 실행 중 예상하지 못한 상황이 발생하여 오작동을 하거나 종료되는 경우가 있는데 발생하게 된 원인을 오류나 예외라고 한다. 이 둘을 구분해보자 오류(Error) 시스템 레벨에서 발생하며 프로그램 코드에 의해 수습될수 없는 심각한 오류로 프로세스에 영향을 준다. 발생 시점에 따라 컴파일 에러, 런타임 에러, 논리적 에러로 나눌 수 있다. 컴파일 에러: 컴파일 시점에 발생하는 에러 런타임 에러: 실행 시점에 발생하는 에러 논리적 에러: 실행은 되었지만 의도한 바와 다르게 동작하는 에러 예외(Exception) 사용자의 잘못된 사용이나 개발자가 잘못 구현한 로직에 의해 발생되며 코드에 의해 수습될 수 있는 미약한 오류이다. 에러와 다르게 예외는 예외처리를 통해 프로그램이 종료되지 않고 동작하..
조건문과 반복문 조건문 조건식에 따라 명령을 수행하도록 제어하는 명령문으로 자바에는 if, switch문이 있다. if문 가장 기본적인 조건문이며 조건식이 참이면 괄호 내의 문장을 수행한다. 이때 조건식의 결과는 반드시 true나 false 이여야 한다. if (조건식){ //수행될 코드 } 처리해야 할 조건식이 여러 개인 경우 else if문을 사용할 수 있으며 else 블럭에서 위의 조건식들이 모두 거짓인 경우를 처리할 수 있다. if (조건식){ //조건식이 참일 때 수행할 코드 } else if(조건식2){ //조건식2가 참일 때 수행할 코드 } else{ //위의 조건식들이 모두 거짓일 때 수행할 코드 } if문 내에 다른 if문을 사용할 수도 있다. if (조건식){ if (조건식2){ //조건식과 조건식2가..