분류 전체보기 33

Java NIO 알아보기

Java NIO > java.nio.file 패키지에서 file I/O, 디렉토리 I/O에 관해서 알아보자. 유저영역 : 실행 중인 프로그램이 존재하는 제한된 영역으로 하드웨어에 직접 접근이 불가. 커널영역 : 반대로 하드웨어에 직접 접근이 가능하고 다른 프로세스를 제어할 수 있는 영역을 말함. 이런 그림을 기반으로 기반의 I/O 프로세스를 정의해보면 다음과 같습니다. ※ 자바 I/O 프로세스 1) 프로세스가 커널에 파일 읽기 명령을 내림. 2) 커널은 시스템 콜[read()]을 사용해 디스크 컨트롤러가 물리적 디스크로부터 읽어온 파일 데이터를 커널 영역안 버퍼에 쏜다. * DMA(Direct Memory Access) : CPU의 도움없이 물리적 디스크에서 커널영역의 버퍼로 데이터를 읽어오는 것 3) ..

Backend/Java 2021.03.01

Java I/O (Input / Output)

목표 자바의 Input과 Output에 대해 학습하세요. 학습할 것 (필수) 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 # 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O 1. 스트림(Stream) 기반의 I/O Byte Streams : 프로그램은 바이트 스트림을 8비트 I/O를 수행하기 위해 사용한다. 모든 바이트 스트림 클래스는 InputStream과 OutputStream의 자손 클래스이다. 많은 바이트 스트림 클래스가 있다. 대표적으로 ..

Backend/Java 2021.02.21

JAVA 상속

학습목표 자바 상속의 특징 super 키워드 메소드 오버라이딩 다이나믹 메소드 디스패치 (Dynamic Method Dispatch) 추상 클래스 final 키워드 Object 클래스 # 자바 상속의 특징 객체에 메소드(기능)를 추가하는 것을 하고 싶다. 그러나 아래 2가지 때문에 어렵다. 1. 만약 객체에 추가하는 메소드를 자신이 만들지 않았다. 그렇다면 원 소스를 업데이트 하면 추가한 메소드가 사라져서 이런 문제가 일어나지 않기 위해서는 지속적으로 코드를 관리해야 한다. 2. 해당 객체가 다양한 곳에서 사용되면 다른 곳에서 불필요한 기능이 포함될 수 있다. 그럼 기존의 객체를 그대로 유지하면서 어떤 기능을 추가하는 방법이 없을까? 이런 맥락에서 등장하는 것이 상속이다. 즉 기존의 객체를 수정하지 않으..

Backend/Java 2021.02.20

annotations

학습목표 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 애노테이션 기본 @GetMapping("hello") //hello 같이 동적인 변수는 들어갈 수 없다. static(정적)이어야 한다. public String hello(){ return "hello"; } # 애노테이션 정의하는 방법 애노테이션의 여러 가지가 있는 데 주로 3가지 용도로 쓰인다. 1. 컴파일러에 대한 정보 : 컴파일러가 오류를 감지하거나 경고를 억제하는 데 주석을 사용할 수 있다. 2. 컴파일 시간 및 배포 시간 처리 : Software tools 는 annotation 정보를 처리하여 코드를 생성, XML 파일 등을 생성할 수 있다. 3. 런타임 처리 : 일부 주석을 런타임..

Backend/Java 2021.02.06

Enum 자바의 열거형

학습 목표 enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet enum은 자바 5.0부터 사용할 수 있게 되었다. 상수는 유일무이 고정된 값. enum 정의하는 방법 상수의 그룹을 미리 정할 수 있는 것이 열거형(enumerated type)이다. 서로 연관된 상수들의 집합이라고 할 수 있다. 문법적으로 미리 상수를 고정시켜서, 런타임 에러를 방지하고, 컴파일시에 발견할 수 있도록 한다. (좋은 프로그래밍은 자기자신을 견제해야 한다.) class Fruit{ public static final Fruit APPLE = new Fruit(); public static final Fruit PEACH = new Fruit(); p..

Backend/Java 2021.01.29

[Java] 클래스

# 클래스 정의하는 방법 객체지향 컨셉으로 아래 샘플로 각각 필드와 생성자, 메소드에 관해서 설명해보겠다. public class Bicycle { // the Bicycle class has // three fields public int cadence; public int gear; public int speed; // the Bicycle class has // one constructor public Bicycle(int startCadence, int startSpeed, int startGear) { gear = startGear; cadence = startCadence; speed = startSpeed; } // the Bicycle class has // four methods publ..

Backend/Java 2021.01.20

[Java] 선택문, 반복문

#선택문 if-then & if-then-else 가장 기본적인 선택문이다. 오직 특정 if조건이 true일때만 해당 if 블럭이 실행된다. void applyBrakes(){ //the "if" clause: bicycle must be moving if(isMoving) //the "then" clause: decrease current speed currentSpeed--; } } void applyBrakes(){ //the "if" clause: bicycle must be moving if(isMoving) //the "then" clause: decrease current speed currentSpeed--; } else{ System.err.println("The bicycle has a..

Backend/Java 2021.01.18

Java 예외 처리 정리

# 목표 자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 자바가 제공하는 예외 계층 구조 Exception과 Error의 차이는? RuntimeException과 RE가 아닌 것의 차이는? 커스텀한 예외 만드는 방법 # 자바에서 예외 처리 방법 (try, catch, throw, throws, finally) try ~ catch : try를 활용해서 코드를 실행 시키고, catch 조건에 맞는 예외 발생시 작성된 코드대로 예외 처리를 시킬 수 있다. finally 는 예외처리된 후에도 실행될 수 있게 코드작성을 할 수 있다. import java.io.FileWriter; import java.io.IOException; public class Exceptio..

Backend/Java 2021.01.16

Junit5 문법 / 예제 / 활용 방법

#시작하며 모두가 테스트를 싫어하지만 최근 TDD환경이 트렌드로 되면서 Junit을 활용해 테스트코드를 짜는 개발방식이 중요해졌다. Test Driven Development (Write test first, then code) #Junit5 라이브러리 활용 방법 (vs code) 1. 아래 jar파일을 받아서 폴더에 저장한다. mvnrepository.com/artifact/org.junit.platform/junit-platform-console-standalone Maven Repository: org.junit.platform » junit-platform-console-standalone Module "junit-platform-console-standalone" of JUnit 5. Versi..

Backend/Java 2021.01.16

ORA-32034 / ORA-00936: 누락된 표현식 (with 포함된 insert시에)

업무 중에 with 포함된 insert작업을 하는 중에 'ORA-00936: 누락된 표현식' 가 발생했다. [ORACLE 11g] INSERT INTO IN_TABLE ( COL1, COL2, COL3 ) ( WITH V_WITH AS ( SELECT A.WITH_COL1, A.WITH_COL2, A.WITH_COL3 FROM TEMP_WITH A ) SELECT B.WITH_COL1, B.WITH_COL2, B.WITH_COL3 FROM V_WITH B ) ; 위와 같이 변경하면 잘 될줄 알았지만 역시 동일한 에러가 난다. 괄로'()' 안에만 쿼리를 돌리면 문제없이 작동한다. WITH문 옆에 괄호가 에러의 원인이었다. [해결방법] INSERT INTO IN_TABLE ( COL1, COL2, COL3 ..

DB/Oracle 2021.01.12