JAVA

[자료구조] Java Stack과 Queue의 혼동하기 쉬운 메서드
이 문서는 java의 Collection Framework의 대한 기본적인 이해를 바탕으로합니다.(Collection객체의 자손들) 이 문서는 Stack과 Queue에 대한 기초적인 개념 이해를 바탕으로 합니다. Java에서 처음 Stack과 Queue를 처음 공부할 때 조금 헷갈리는 부분이 많았다. 내가 받은 느낌은 체계화가 잘 되어있는 다른 설계들과 달리 좀 통일되지 않은 느낌이 들었다. 그래서 내가 헷갈리는 점들을 모아 정리했다. Java에서의 Stack과 Queue 일단 가장 먼저 알아야할 것이 Java에서 Stack은 Class로 Queue는 Interface로 구현이 되어있다는 것이다. 따라서 사용할 때 Stack은 Stack st = new Stack(); 과 같이 사용하고 Queue는 다양..
[JAVA] 혼동하기 쉬운 Objects.equals의 null 처리
기초적인 내용이지만 쉽게 혼동하는 부분이다. 일단 기초적인 설명을 하자면 Objects 클래스에는(모든 오브젝트의 조상 Object와 다르다) equals와 deepEquals 메서드가 있다. deepEquals는 다차원 배열까지 비교할 수 있다.(내부적으로 루프를 탐) String과 같은 각자의 객체도 equals를 갖고 있는데 왜 또 있지? 라고 생각하면, java.util.Objects의 equals는 내부적으로 null을 확인하고 처리하는 메서드를 가지고 있다. 만약 String s1이 null인데 아래와 같은 실행을 하면 NullPointerException 이 발생할 것이다. s1.equals(s2) 하지만 아래와 같이 쓰면 null이더라도 같은지 확인하게 된다. Objects.equals(s..
[JAVA] switch문과 else-if문의 차이(변수 초기화 필요)
public class FileUtils { public List parseFileInfo(int boardIdx, MultipartHttpServletRequest multipartHttpServletRequest) throws Exception{ if (ObjectUtils.isEmpty(multipartHttpServletRequest)){return null;} List fileList = new ArrayList(); DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyyMMdd"); ZonedDateTime current = ZonedDateTime.now(); String path = "images/" + current.format(for..
[JAVA]String 비교시 == 대신 .equals써야되는 이유
spring boot에서 세션에 저장된 로그인 아이디와 게시글 정보에 저장된 아이디를 비교하는 로직을 만들던 중 문제가 발견했다. public boolean checkModificationAuthority(String loginId, String creatorId) { System.out.println("."+loginId+"."); System.out.println("."+creatorId+"."); return loginId == creatorId; } 로그는 아래와 같다. .test. .test. true 순간 왜 그런지 고민했다. MyBatis에서 취급하는 String이 다른 객체인가? 같은 생각을 해봣다. 하지만 잠시후 왜 그런지 알것 같았다. 자바의 정석 책을 공부하다가 읽었던 내용이 떠올랐다..

[JAVA] 예외와 예외 처리(exception)
프로그램 오류 프로그램이 실행 중 오작동을 하거나 비정상적으로 종료되는 경우가 있다. 이에 대한 원인을 에러 또는 오류라고 한다. 오류의 종류 자바에서는 실행중 발생할수 있는 오류를 두가지로 분류하였다. 에러(error) : 프로그램 코드에 의해서 수습될수 없는 심각한 오류 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 오류 자바에서 오류는 아래와 같은 상속 구조를 갖는다. 모든 예외(Exception)는 Exception클래스의 상속을 받고 있고 예외는 크게 두개로 나눌수 있다. RuntimeException클래스와 그 자손들 Exception클래스와 그 자손들(RuntimeException제외) 프로그래머의 실수로 발생 예외처리가 강제되지 않음 사용자의 실수 같은 외적인 요소로 ..
[배열] Vector 클래스 - 동적으로 크기가 관리되는 객체배열
Array는 크기가 고정되어 있다😢 배열을 사용할때 흔히 마주치는 문제점이 배열은 크기가 고정되어 있어서, 불편하다는 점이다. int[] intArray = new int[10]; 위와 같이 설정했다면 11개의 수를 넣을 수가 없다. 그렇다고 무조건 크기를 크게 할 수도 없는 노릇이다. 이럴때 Vector클래스를 사용하면 된다.😊 Vector클래스는 내부적으로 Object타입의 배열을 가지고 있다. (이거 이해가 안되면, 배열과 다형성에 대해서 공부하세요) 그리고 배열의 크기를 알아서 관리해주기 때문에 인스턴스의 갯수를 신경쓰지 않아도 된다. public class Vector extends AbstractList implements List, Cloneable, java.io.Serializable {..
클래스 간의 관계 선택 팁
자바의 정석 책을 읽다가 굉장히 유용하다고 생각하는 정보가 나와서 요약해보았다. 클래스간의 관계 1.상속관계 상속관계는 말 그대로 한 클래스가 다른 클래스를 상속한 경우를 말한다. 상속을 받은 쪽은 자식 클래스가 되고, 상속을 해준 쪽은 부모 클래스가 된다. class Parent { } class Child extends Parent { // ... } 특징으로는 자식 클래스는 부모클래스의 요소를 물려받는다는 점이있다. 즉 코드의 중복을 막고 관리가 용이해진다는 특징이 있다. 부모클래스가 변경되면 자식클래스는 영향을 받게 되지만, 자식클래스가 변경되어도 부모클래스에 영향을 미치지는 않는다. 또한 자식 클래스로 오면서 부모의 멤버를 덮어쓸 수도 있다. 또한 아래와 같은 특징도 있다. 생성자와 초기화 블럭..
초기화 블럭
초기화 블럭에는 두가지 종류가 있다. 클래스 초기화 블럭 인스턴스 초기화 블럭 1.클래스 초기화 블럭 클래스 안에 단순히 static{ }안에 내용을 작성하면 된다. 클래스가 로딩될 때 먼저 실행된다. 클래스 변수를 초기화 할때 사용한다. 2.인스턴스 초기화 블럭 { }안에 내용을 작성하면 된다. 생성자가 호출될때 생성자보다 선행해서 실행된다. 인스턴스 변수를 초기화 할때 사용한다. 예를 들어 보자 class InitTest{ static int cv = 1; int iv = 1; static { cv = 2; } //클래스 초기화 블럭 { iv = 2; } //인스턴스 초기화 블럭 InitTest () { //생성자 iv = 3; } } 실행 순서는 다음과 같다. 클래스 초기화 인스턴스 초기화 기본값 ..