LocalDateTime 클래스 / parse 메소드 LocalDateTime getDate = LocalDateTime.parse("20191022041", DateTimeFormatter.ofPattern("yyyyMMddHHmm")); LocalDateTime getDate2 = LocalDateTime.parse("201910302041", DateTimeFormatter.ofPattern("yyyyMMddHHmm")); 위 처럼, parse 메소드를 통해 String 문자열을 ‘yyyyMMddHHmm’ pattern으로 LocalDateTime 변수에 저장할 수 있다. until 메소드 long minute= getDate.until(getDate2, ChronoUnit.MINUTES); Str..
NullPointerException NullPointerException은 개발자가 한번이라도 만나봤을 에러이다. 그정도로 흔하게 일어나는 에러로, 이는 “자바의 모든 객체는 NULL일 수 있다.”” 라는 말을 확인시켜준다. NullPointerExcpetion이 발생하는 경우를 예시로 보자. public static getCarInsurancename(Person pserson) { return person.getCar().getInsurance().getName(); } 위 코드에서 getCar()를 실행한 후의 값이 NULL이라면? 차가 없는 사람은 존재할 수 있다. person.getCar()의 값이 NULL인데 getInsurance()가 실행되면 여기서 NullPointerException이..
문제발생 자바 로직에서 VO의 get method를 통해 데이터를 set 해주고 있는 경우에 NullPointerExceptin 에러를 만날 수 있는 경우가 있다. 예제 StudyVO +NoteVO noteVO +PenVO penVO (penVO는 Null이다) 예시로, StudyVO 안에 NoteVO 타입의 변수와 PenVO 타입의 변수가 선언되어있다. noteVO는 Null이 아니기 때문에 noteVO안의 필드를 get 메소드를 통해 가져와도 에러가 발생하지 않는다. StudyVO studyVO = new StudyVO(); /** getNoteVO()는 studyVO가 Null이 아니므로 에러가 발생하지 않는다. */ NoteVO noteVO = studyVO.getNoteVO(); /** note..
LocalDateTime jdk1.8 이상부터 사용 가능한 LocalDateTime을 사용해보자. LocalDateTime getDate = LocalDateTime.parse("20191022041", DateTimeFormatter.ofPattern("yyyyMMddHHmm")); LocalDateTime getDate2 = LocalDateTime.parse("201910302041", DateTimeFormatter.ofPattern("yyyyMMddHHmm")); 위 처럼, parse 메소드를 통해 String 문자열을 'yyyyMMddHHmm' pattern으로 LocalDateTime 변수에 저장할 수 있다. long minute= getDate.until(getDate2, ChronoUni..
날짜변환 String-> Date Format -> XMLGregorianCalendar convert -> GMT+09:00 설정 package com.java; import javax.xml.datatype.DatatypeFactory; import javax.xml.datatype.XMLGregorianCalendar; import java.text.SimpleDateFormat; import java.util.Date; import java.util.GregorianCalendar; import java.util.Locale; import java.util.TimeZone; public class Main { public static void main(String[] args) { String d..
@Override 어노테이션의 사용 자바 코드에서 메소드에만 선언할 수 있는 @Override 어노테이션이 있다. @Override public boolean equals(Object b) { return b.test == test } 위 예제코드로 @Override 어노테이션의 의미를 설명해보자. 상위 타입의 메서드를 재정의했다는 의미인데, 위 예제의 클래스가 Object 클래스(상위 타입)의 equals 메서드를 재정의한 것이다. 기존의 Object 클래스의 equals 메서드가 아닌 해당 메서드를 재선언하여 새로 선언한 로직을 실행하겠다는 의미이다. @Override 어노테이션을 일관되게 사용하면 여러 버그들을 예방할 수 있다. @Override 메서드의 잘못된 사용 예제 main 메서드를 보면 똑..
Map null값 체크 //collections4 compile "org.apache.commons:commons-collections4:4.0" MapUtils를 사용하여 map 객체의 null 체크가 가능하다. Map map = new HashMap; MapUtils.isEmpty(map); MapUtils.isEmpty() /** * Null-safe check if the specified map is empty. * * Null returns true. * * @param map the map to check, may be null * @return true if empty or null * @since 3.2 */ public static boolean isEmpty (final Map map..
src/resources 폴더 안의 파일 읽기 package io.security.basicsecurity.controller; import java.io .*; public class GetFile { public static void main(String[] args) { FileInputStream file = null; BufferedReader br = null; ClassLoader loader = GetFile.class.getClassLoader(); try { file = new FileInputStream(loader.getResource("F1014/file.txt").getFile()); br = new BufferedReader(new InputStreamReader(file, "..
String의 계속된 인스턴스 생성 자바 코드에서 만약, 하나의 객체의 기능이 반복이 될 경우 해당 객체와 같은 객체를 여러개 만드는 것보다 하나의 객체를 재사용하는 편이 낫다. 잘못된 String 객체 생성 String s = new String("abd"); 위 코드는 잘못된 코드이다. 문법 상으로는 문제가 없지만, 완전히 쓸데없는 행위이다. 생성자에 넘겨진 “abd” 자체와 생성자의 호출로 만들어지는 String 객체가 기능적으로 완전히 똑같기 때문이다. 위 코드 한줄이 반복문같은 여러번 호출되는 코드라면 String 인스턴스를 무의미하게 수백만개 만들 수 있다. 하나의 String 인스턴스 String s = "abd"; 위 코드 한줄로 String 인스턴스 s를 생성하였고, 만약 “abd”가 필..
필드 어떠한(객체) 데이터를 제공하기 위한 역할을 한다. -필드: 클래스 안에서 선언되는 변수 -지역변수: 메소드, 블록{} 안에서 선언되는 변수 public class Test { // 필드선언 위치 String str; public static void main(String[] args) { Test a = new Test(); a.b(); } public Test() { // 생성자 } public void b() { // 메소드 String v; System.out.println(v); // ERROR -> 지역변수 v는 자동으로 초기화되지 않기때문이다. String str = "JAVA"; System.out.println(str); // 지역변수 str (전역변수 str이 아닌 지역변수 str..
JAVA 인스턴스 생성 클래스명 객체변수명 = new 클래스명(); Test a = new Test(); 필수적으로 많이 사용하는 코드이지만 이 한줄을 선언함으로써 어떠한 일들이 일어나는지 생각해본적이 없었다. 가장중요한건 이러한 기본지식도 알아야 JAVA 공부를 하는데에 훨씬 많은 도움이 될 것이다. 우선 위 코드는, 인스턴스(객체) 생성시 사용하는 코드이다. 선언된 객체변수 a는 참조값을 갖게된다. new 연산자란? 클래스 타입의 인스턴스(객체)를 생성해주는 역할을 한다. new 연산자를 통해 메모리(Heap) 영역에 데이터를 저장할 공간을 할당받는다. 그 공간의 주소값을 객체변수 a에게 반환해주고 생성자를 호출하게 된다. 생성자란? 인스턴스 변수(필드)들을 초기화해주고 위 예제처럼 선언되어있지 않으..
I/O 스트림 - 바이트 단위로 데이터를 전송한다. - 실제의 입력과 출력이 표현된 데이터의 흐름이다. - 운영체제에 의해 생성되는 가상의 연결고리 역할을 수행한다. - 출력과 입력의 중간매개체 역할을 한다. - 스트림을 한 방향으로만 통신이 가능하여 입력과 출력을 동시에 실행할 수 없다. - 사용목적에 따라 입력스트림, 출력스트림을 구분한다. (1) 입출력 스트림 입력: InputStream read() return : int -> 더이상 읽어들일 바이트가 없으면 -1을 반환한다. 출력: OutputSTream write() return: void (2) 바이트 기반 스트림 파일 입력: FileInputStream 출력: FileOutputStream 메모리 입력: ByteArrayInputStream..