인파

You Can Become A

늦게 시작해도 누구든지 노력하면 개발자가 될수 있어요 !

공부한 내용을 정리합니다
Language/Java

☕ (Un)Checked Exception과 트랜잭션의 오해와 진실

잘못 알려진 (Un)Checked Exception 트랜잭션 Checked Exception 과 Unchecked Exception 차이를 알아볼때 다음과 같은 정리본을 발견 하였다. 만일 코드에서 예외가 발생했는데 Checked Exception 이면 롤백을 하지않고 그대로 진행되고, 만일 Unchecked Exception 이면 롤백을 한다는 얘기이다. 그러나 이는 반은 맞고 반은 틀린 정의이다. 백기선님의 강의에서도 이 부분에 대해서 따끔하게 혼내주시기도 한다. 지금 부터 그 이유를 알아보자. 자바의 트랜잭션 다루기 트랜잭션은 데이터베이스에서도 쓰이는 개념으로서, 하나의 작업 단위를 뜻한다. 예를들어 쇼핑몰의 "상품발송"이라는 트랜잭션을 가정해 보자. "상품발송" 이라는 트랜잭션에는 "포장" → "..

category_image
인파_
2022.11.23
(0)
Language/Java

☕ 자바 에러(Error) 와 예외 클래스(Exception) 💯 이해하기

프로그래밍의 오류 종류 프로그램에서 오류가 발생하면 시스템 레벨에서 프로그램에 문제를 야기하여 원치 않는 버그를 일으키거나, 심각하면 실행 중인 프로그램을 강제로 종료시키도 한다. 프로그램 오류의 원인으로는 정말 다양한 상황이 있을 수 있다. 내부적인 요인으로는 프로그램 설계 로직에 구멍이 있어서 그럴수도 있고, 외부적인 요인으로는 프로그램 자체 문제가 아닌 하드웨어에서 문제가 생겨 프로그램에 오류가 발생할 수 도 있다. 실제로 여러분이 프로그래밍 할때 겪어본 오류의 종류로는 단순 오타 서부터 시작해서 파일을 불러오는데 정작 파일이 없거나 등 잘못된 설계로 인한 메모리 펑크 까지 범위도 다양하다. 프로그래밍에서는 이러한 오류를 발생 시점에 따라 크게 3가지로 나눈다. 컴파일 에러(compile-time ..

category_image
인파_
2022.11.22
(0)
Language/Java

☕ 자바 clone 메서드 재정의 (얕은 복사 & 깊은 복사)

clone 메소드 Object.clone() 메소드는 인스턴스 객체의 복제를 위한 메소드로, 해당 인스턴스를 복제하여 새로운 인스턴스를 생성해 그 참조값을 반환한다. 이러한 clone() 메소드를 사용하기 위해서는 오버라이딩을 해야 되는데, 이때 데이터의 보호를 이유로 Cloneable 인터페이스를 구현한 클래스의 인스턴스만이 사용할 수 있다. Object 클래스의 clone() 메소드는 기본으로 protected 접근 권한을 갖고 있기 때문에, 상속하여 메소드를 public 접근제어자로 재정의하여 어디서나 복제가 가능하도록 해야 한다. import java.lang.Cloneable; // 객체 복사 메소드를 사용하기 위해서는 Cloneable 인터페이스를 구현해서 clone을 재정의 해야함 class..

category_image
인파_
2022.11.17
(0)
Language/Java (JVM)

☕ 자바 객체의 hashCode는 고유하지 않다 ❌

객체의 hashCode는 고유하지 않다 자바에서는 포인터를 철저히 숨겼기 때문에 직접적인 객체의 주소 원래값을 얻을수는 없다. 그래서 자바에서는 참조 변수의 주소값을 표현하기 위해 위와 같이 해시코드를 이용한다. 보통 해싱 알고리즘 상 서로 다른 두 주소값을 가지고 있는 객체는 결코 같은 해시코드를 가질 수 없다. 하지만 예외가 있는데, 바로 hashCode() 메서드가 int형 정수를 반환한다는 점이다. 만일 자신의 컴퓨터가 32bit 사양이라면 이는 문제가 되지 않는다. 하지만 현대 시대에서 대부분 사용하는 64비트 컴퓨터에서 돌아가는 JVM(가상머신)은 기본적으로 8바이트(64bit) 주소체계를 기본으로 하는데, 만일 8바이트의 주소값을 hashCode를 이용해 반환하면 메서드의 타입에 따라 4바이..

category_image
인파_
2022.11.16
(0)
Language/Java

☕ 자바 equals / hashCode 오버라이딩 - 완벽 이해하기

equals 메소드 어떤 두 참조 변수의 값이 같은지 다른지 동등 여부를 비교해야 할때 사용하는 것이 equals() 메서드이다. 대표적으로 String 타입의 변수를 비교할때 가장 많이 거론되는 메서드일 것이다. String s1 = "Hello"; String s2 = "Hello"; System.out.println(s1 == s2); // 주소 비교 false System.out.println(s1.equals(s2)); // 값 비교 true 그러면 문자열이 아닌 클래스 자료형의 객체 데이터일 경우 equals() 메소드는 어떻게 다뤄질까? 어렵게 생각할 필요 없다. 비교할 대상이 객체일 경우 객체의 주소를 이용하여 비교한다. 즉, 객체 자체를 비교할때는 == 이나 equals() 나 똑같다고 ..

category_image
인파_
2022.11.16
(0)
Language/Java

☕ 자바 toString 오버라이딩 - 완벽 이해하기

toString 메소드 기본적으로 Object 클래스의 toString() 메소드는 해당 인스턴스에 대한 정보를 문자열로 반환한다. 이 메서드는 인스턴스에 대한 정보를 문자열로 제공할 목적으로 정의되어 있는 것이다. 이때 반환되는 문자열은 클래스 이름과 함께 구분자로 @가 사용되며, 그 뒤로 16진수 해시 코드(hash code)가 추가된다. 해시 코드 값은 인스턴스의 주소를 해싱하여 변환한 값으로, 고유 숫자로서 인스턴스마다 모두 다르게 반환된다. 실제로 toString() 메서드 내부를 본다면 다음과 같이 구현되어있다. class MyObject extends Object { // extends Object 는 생략해 줘도 된다. int objId; String objName; public MyObj..

category_image
인파_
2022.11.15
(0)
Language/Java

☕ 자바 Object 클래스와 메서드 오버라이딩

Object 클래스 모든 자바의 클래스는 Object 클래스로 부터 시작된다. 즉, Object 클래스가 모든 클래스의 조상 혹은 base 라고 할 수 있다. 사실 우리가 클래스 파일을 만들어 클래스명을 작성하면 자동적으로 Object 클래스가 extends 가 된다. 우리가 클래스를 만들때 굳이 Object 클래스를 상속시키지 않아도 자동으로 상속해줘서 Object 클래스가 지원하는 메서드를 자유롭게 사용이 가능한 이유이다. 만일 다른 클래스를 상속시키면 당연히 클래스는 한개밖에 상속할수 없기에 extends Object는 사라지지만, 부모 클래스에서 Object를 상속하고 있기에 결국 모든 클래스는 Object 클래스를 상속 받고 있는 형태가 된다. // extends Object 를 안써줘도 컴파일..

category_image
인파_
2022.11.15
(0)
Language/Java

☕ 자바 Wrapper 클래스와 Boxing & UnBoxing 총정리

래퍼 클래스 (Wrapper Class) 이전 강의글에서 우리는 자바의 자료형은 기본 타입(primitive type)과 참조 타입(reference type) 으로 나누어지고 각 특징에 대해 알아보았다. 프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 종종 생기게 된다. 예를 들어 메소드의 인수로 객체 타입만이 요구되면, 기본 타입의 데이터를 그대로 사용할수 없기 때문에 어떠한 변환 작업이 필요해 진다. 또한 멀티스레드 환경에서 동기화 데이터를 사용해야 할 경우 이를 객체화 해야 할 필요성이 생긴다. 이럴 때에 기본 타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 한다. 자바는 모든 기본타입(primitiv..

category_image
인파_
2022.11.14
(0)
Language/Java

☕ BigInteger & BigDecimal 사용법 💯 정리

BigInteger 자료형 BigInteger는 언제 사용되는가 Type 범위 int -2,147,483,648 ~ 2,147,483,647 long -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 자바의 int는 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647이고 long은 메모리 크기는 8byte로 표현할 수 있는 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 이다. 보기엔 조 단위가 넘는 커다란 숫자이지만, 우주 시뮬레이션과 같은 무한한 정수를 계산하기 위해서는 턱 없이 부족한 공간이다. 만일 이 타입의 범위를 넘어서게 되면 에러가 난..

category_image
인파_
2022.11.12
(0)
Language/Java

☕ 자바 split / StringTokenizer - 문자열 자르기 비교

자바 문자열 자르기 자바에서 문자열을 자르는데 사용하는 대표적인 클래스가 String 클래스의 split 메서드와 StringTokenizer 클래스가 있다. 이번 시간에는 이 둘의 사용 문법을 알아보고, 둘이 어떠한 차이점이 있는지, 어떨때 어느 것을 사용해야 하는지 알아보자. String 클래스의 split 메서드 String 클래스에서 제공되는 split 메서드는 매개변수 갯수가 다른 2개로 오버로딩 되어 있다. 자바의 split 메서드의 가장 큰 특징은 구분자를 문자로 받는게 아니라 정규식으로 받는다는 점이다. 정규식이 난이도가 있는 부분이긴 하지만 덕분에 다채롭고 섭세하게 문자열을 자를 수 있다는 특징이 있다. public String[] split(String regex); // 반환을 Str..

category_image
인파_
2022.11.03
(0)
Language/Java

☕ 자바 String / StringBuffer / StringBuilder 차이점 & 성능 비교

자바에서는 대표적으로 문자열을 다루는 자료형 클래스로 String, StringBuffer, StringBuilder 라는 3가지 자료형을 지원한다. 위 3가지 클래스 자료형은 모두 문자열을 다루는데 있어 공통적으로 사용되지만, 사용 목적에 따라 쓰임새가 많이 달라지게 된다. 이번 시간에는 String, StringBuffer, StringBuilder 클래스 차이점을 알아보고, 이 3가지 중 어느 상황에서 어느 자료형을 사용하는 것이 이상적이고 성능적으로는 어느것이 더 좋은지 총정리 해보는 시간을 가져보자. StringBuffer / StringBuilder 클래스 StringBuffer / StringBuilder 클래스는 문자열을 연산(추가하거나 변경) 할 때 주로 사용하는 자료형이다. 물론 Str..

category_image
인파_
2022.11.02
(0)
Language/Java

☕ 자바 String 타입 특징 이해하기 (String Pool & 문자열 비교)

여타 대부분의 프로그래밍 언어에서 문자열 이라는 데이터를 저장하기 위해 string 이라는 데이터 타입을 사용한다. 이 string 데이터를 다루는데 있어 특별히 유의해야 할점은 없어보이지만, 자바에서의 string은 특별한 자료형으로 취급되어 여러 유의해야 할 사항들이 존재한다. 단순히 문자열을 다루는 것이지만 이를 어떻게 다루느냐에 따라 어플리케이션의 성능이 차이가 있을 수 있기 때문이다. 이 포스팅에서는 초보부터 중고급까지 짚어야 할 것들을 추려서 간단하게 소개 해볼 예정이다. 자바 String의 특징 String은 객체 자바(Java) 프로그래밍에서 String 은 int 와 char 와 달리 기본형(primitive type)이 아닌 참조형(reference type) 변수로 분류 된다. 즉, ..

category_image
인파_
2022.11.01
(0)