본문 바로가기

java

(20)
[주클] 주관적인 클린 코드 - NPE 피하기 이 시리즈는 어떤 코드가 좋은 코드일까라는 질문에 답하기 위한 저의 주관 100%의 시리즈입니다. 제가 생각한 것이 정답이 아닐 확률이 높습니다. 여러분들이 생각했을 때 더 좋은 방법이 있다 하시면 댓글로 달아주세요! 제가 Java를 사용해서 코드를 작성하고 테스트 중에 가장 민감하게 느껴지는 예외는 Null Pointer Exception입니다. 이는 처음 개발에 대해서 배울 때도 여러 번 주의를 들었던 부분이어서 그런 것 같기도 합니다. Null Pointer Exception(이하 NPE)는 왜 발생할까요? Null인 객체를 참조하여 발생하는 Runtime Exception입니다. 즉, Null인 객체를 이용하여 무언가를 하려고 한다면 에러가 발생합니다. NPE를 발생하지 않게 하려면 어떻게 해야 ..
[Java] HashMap에서 잠시 헷갈렸던 부분! Java에서 Map을 종종 사용하게 됩니다. 근데 Map에 대한 로직을 보는데 헷갈리는 부분이 있더라고요. 제가 헷갈렸던 부분을 예시로 보고 정리해보았습니다. HashMap HashMap같은 경우에는 메모리 값에 기반한 해시 값을 이용해 값을 찾아오게 됩니다. 여기에 사용되는 해시값은 Object 클래스에 포함되는 hashCode() 메서드를 통해서 만들어지게 됩니다. 그리고 여기서 만들어지는 값으로 equals() 메서드를 통해서 Object끼리 비교하게 됩니다. 물론 equals와 hashCode는 모두 오버라이딩이 가능합니다. 그리고 변경 시에는 통일성을 위해 두 메서드 모두를 수정하는 것이 필수입니다. 사용하는 방식과 약간 헷갈렸던 사례에 대해서 예제를 통해 보겠습니다. 예시 class TestC..
[Java 15 ~] Record Java Record 자바 14에서 preview로 등록되었고 자바 16 버전에 정식으로 새로운 기능으로 Record Type이 추가되었습니다.(나모찾기님 수정) 내용을 간단하게 설명하자면 기존의 POJO 객체를 만들 때 get~, set~ 이런 식으로 잡다하게 붙여줘야 할 일을 줄여주는 Type입니다. 기능 모든 프로퍼티를 포함한 생성자 제공 모든 프로퍼티에 private final 적용 모든 프로퍼티의 getter 메소드 생성 toString, equals, hashCode 메소드 생성 프로퍼티들에게 annotation을 붙일 수 있도록 허용 사용법 //Record를 사용하지 않은 클래스 public class Car { private final String name; private final int..
JVM에 관하여 Java는 쓰는데 JVM이 뭐지? Java를 사용하는 데에는 아주 간단한 과정이 있습니다. 자신의 OS에 맞는 JDK를 설치하고 내가 짠 Java 코드를 javac 명령어로 실행시키면 프로그램이 구동됩니다. 근데 이러한 과정은 맥, 윈도우, 리눅스 모두 같은 과정을 거쳐서 사용할 수 있습니다. 이것은 Java 언어의 특성이자 JVM을 이용해서 가능한 일입니다. JVM이란? Java Virtual Machine 자바 바이트 코드를 해석하고 실행 자바 애플리케이션을 클래스 로더(Class Loader)를 통해 읽어서 자바 API와 함께 실행 자바의 WORA(Write Once Run Anywhere) 컨셉을 위해 사용되는 소프트웨어 JVM은 우리가 흔히 사용하는 프로그램들과 똑같은 소프트웨어입니다. 단지 자..
[프로그래머스] 프렌즈4블록 (Java) 카테고리 로직 짜기 나만의 카테고리 테트리스 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/17679 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙 programmers.co.kr 요점 블락을 내려보내는 테트리스 문제는 for문을 역으로 순회해야한다. 참고 지식 String.toCharArray() 풀이 (Java) import java.util.*; class Solution { private char[][] glbBoard; public int solutio..
[Java] Checked Exception, Unchecked Exception 1. Checked Exception, Unchecked Exception이란 자바로 열심히 코딩을 하다보면 여러가지 Exception(예외)들을 만납니다. 실무에서뿐만 아니라 코딩테스트를 풀다가도 자주 만나는 Exception으로는 NullPointException, ArrayIndexOutOfBoundsException 등이 있습니다. 그렇다면 앞의 두 예시는 어떤 상황에서 발생할까요? 보통은 컴파일 시에는 발생하지 않습니다. 그랬다면 이미 알고 수정했을겁니다. 그렇다면 실행도중에 발생한 예외일겁니다. 그럼 Runtime 시점에 발생했으니 RuntimeException일겁니다. 이것들은 우리가 프로젝트를 실행할 때는 전혀 문제가 없습니다. 그래서 굳이 에러가 발생할 상황이 만들어지지 않는다면 체크할 ..
[프로그래머스] 괄호 회전하기 (Java) 카테고리 자료구조 나만의 카테고리 자료구조 - Stack 문제 링크 programmers.co.kr/learn/courses/30/lessons/76502 코딩테스트 연습 - 괄호 회전하기 programmers.co.kr 요점 Stack을 사용하여 올바른 괄호를 판단하는 로직을 구현할 수 있다. 참고 지식 Java Stack 풀이 (Java) import java.util.*; class Solution { private int answer = 0; public int solution(String s) { Stack stack = new Stack(); for (int i = 0; i < s.length(); i++) { stack.clear(); s = s.substring(1, s.length()) ..
[프로그래머스] 징검다리 건너기 카테고리 이분 탐색 나만의 카테고리 이분 탐색 문제 링크 programmers.co.kr/learn/courses/30/lessons/64062 코딩테스트 연습 - 징검다리 건너기 [2, 4, 5, 3, 2, 1, 4, 2, 5, 1] 3 3 programmers.co.kr 요점 이분 탐색을 구현할 수 있는지를 확인하는 문제 개인적으로 5만번 이상의 반복을 시키는 문제는 드물다고 생각 => 그 이상이라면 다른 방법을 찾아야한다 이분 탐색 문제의 Target 수가 없고 최대값을 찾는 문제라면 보통 배열 기준이 아닌 문제의 정답에 기준을 맞춰야한다. 참고 지식 대개 이분탐색의 Target이 정해져 있다면 탐색의 끝은 mid == target, 아니라면 min > max 일 때 끝이다 풀이 (Java) cla..
[Java] String 선언 방식에 따른 차이 String을 사용할 때 2가지 방식으로 선언할 수 있는데 어떤 차이가 있을까요? Java에서 String은 Reference 타입 중 가장 많이 사용되지 않을까 생각됩니다. 그런데 잘 알지도 못하고 사용하고 있다고 위의 질문을 들었을 때 알게 되었습니다. 그리고 Java책을 다시 펴보게 됐네요 ㅎㅎ public class Test { public static void main(String [] args) { String init1 = new String("init1"); String init2 = "init2"; String init2_2 = "init2_2"; } } String을 사용할 때 보통은 init2의 방식대로 사용하겠지만 위의 방식도 가능합니다. 중요한 차이점은 JVM에서 관리하는 메모리 ..
[Java] Java Primitive Type VS Reference Type Java에서는 기본형 타입과 참조형 타입이 있습니다. 저도 너무나 자연스럽게 사용하고 있지만 아래의 질문을 받으니 대답 할 수가 없었습니다. Java에서 Primitive Type, Reference Type은 메모리 어디에 저장이 될까요? 이에 대한 정답은 아래에 정리하겠습니다. 1. Primitive Type (기본형 타입) 기본값이 NULL이 아닌 값들로 이루어져있다. 실제 값을 저장하고 메모리는 스택(Stack) 메모리에 저장된다. 컴파일 에러를 발생시킨다. 타입 메모리 크기 기본값 표현 범위 boolean 1 byte false true, false byte 1 byte 0 -128 ~ 127 short 2 byte 0 -32,768 ~ 32,767 int 4 byte 0 -2,147,483,6..