[Java] 동등성, 동일성
·
Language/Java
자바에서 객체를 비교할 때 혼동되기 쉬운 두 가지 개념 : 동등성(Equality)과 동일성(Identity)동등성(Equality)동등성은 두 객체가 논리적으로 동일한 값을 가지고 있는지를 비교primitive type : 값 자체를 비교reference type : 객체의 내부 상태(속성 값)를 비교동일성(Identity)동일성은 두 참조 변수가 메모리 상에서 정확히 같은 객체를 가리키는지를 비교두 변수가 힙 메모리에서 동일한 주소를 참조하는지를 비교하는 것equals()와 == 연산자== 연산자primitive type에 사용: 값 자체를 비교(동등성)reference type에 사용: 두 참조 변수가 같은 메모리 주소를 가리키는지 비교(동일성)@Testvoid comparePrimitive() {..
[Java] Enum 비교를 equals() 로 하지않고 == 로 해야 하는 이유
·
Language/Java
Java에서 Enum(열거형)은 관련된 상수들의 집합을 정의하는 특별한 데이터 타입이다. 타입 안전성을 보장하며, 코드의 가독성을 높여주는 장점이 있다.void foo1(String direction) { // direction에는 무슨 값이 들어갈지 모른다. if (direction == "????") { // ... }}// 열거형을 정의하면,enum Direction { NORTH, SOUTH, EAST, WEST}void foo1(Direction direction) { // 어떤 값이 올지 예측할 수 있다.}위의 예시처럼 Enum을 사용할 때 가장 기본적인 연산 중 하나는 두 Enum간 비교하는 것이다. 자바에서는 비교를 위한 equals() 메서드와 ==..
[Java] Exception
·
Language/Java
예외란?프로그램 실행 중 발생할 수 있는 비정상적인 상황을 나타내며, 이를 처리하기 위한 메커니즘자바에서는 예외를 Throwable 클래스와 그 하위 클래스(Exception, Error)로 표현Error: 시스템 수준에서 복구할 수 없는 문제(JVM 내부 오류 등)Exception: 애플리케이션 수준에서 복구 가능한 문제Unchecked Exception : RuntimeException과 그 하위 클래스Checked Exception :Exception 을 상속하지만 RuntimeException의 하위 클래스가 아닌 예외들예외 처리의 개념은 자바 이전에도 존재했지만, 자바는 이를 더 정형화하고 언어 차원에서 강력하게 지원한다. 자바의 Checked Exception은 개발자가 예외 처리를 강제함으로..
[Java] call by value, call by reference
·
Language/Java
call by value와 call by reference는 함수 호출 시 매개변수를 전달하는 방식이다. 함수 호출 과정에서 함수의 매개변수가 전달될 때 원본 데이터를 복사하는 것인지, 원본 데이터의 참조를 전달한 것인지를 구분하는데 사용한다. 함수 내부에서 원본 데이터를 변경할 수 있는지의 차이가 있다.call by valuecall by value는 값을 복사해서 함수로 전달하는 방식이다. 함수는 전달받은 값의 복사본을 사용하며 함수 내부에서 값을 변경하더라도 호출한 쪽의 원본 데이터에는 영향을 미치지 않는다.call by referencecall by reference는 값이 저장된 메모리의 주소를 전달하는 방식이다. 함수는 전달받은 주소를 통해 원본 데이터를 직접 참조하기 때문에, 함수 내부에서 ..
[Java] sealed
·
Language/Java
의도하지 않은 클래스가 상속될 경우 예상치 못한 동작이나 버그가 발생, 또는 라이브러리나 공통 클래스에서 상속 제한 필요JDK 17부터 sealed를 도입클래스 계층 구조에 대한 제어를 더욱 강화클래스와 인터페이스가 허용된 하위 유형을 정의할 수 있다.public interface Loan { double calculateInterest();}어떤 클래스든지 Loan을 구현 가능한 상태sealed 인터페이스 정의sealed 인터페이스와 허용하는 하위 클래스를 선언 방법public sealed interface Loan permits HomeLoan, PersonalLoan, AutoLoan { double calculateInterest();}Loan을 sealed로 지정, HomeLoan, ..
[Java] StringUtils의 hasLength()와 hasText()
·
Language/Java
프로젝트 진행 중 intellij에서 StringUtils.isEmpty()를 사용하는 곳에 노란색 경고와 hasLength(String)나 hasText(String)를 대신 사용하라는 메시지가 나와서 두 메서드의 차이점을 찾아봤다.StringUtils스프링 프레임워크에서 제공하는 문자열 처리 유틸리티 클래스org.springframework.util 패키지에 포함되어 있으며, 문자열 검사, 변환, 조작, 비교 등의 문자열 처리 관련 메서드를 가진 유틸리티 클래스이다.isEmpty()는 5.3 버전부터 deperecated되기 때문에 hasLength()나 hasText() 사용을 권장한다.두 메서드는 비슷한 역할을 하지만 코드를 보면 차이점이 있다.빈 문자열인지 확인이 필요할 경우 hasText()를..
[Java]lombok 적용
·
Language/Java
[Java]lombok 적용 lombok 적용DTO를 작성할 때 일일히 Getter, Setter, ToString을 생성하기 귀찮다. 물론 IDE에서 자동으로 코드 생성이 가능하긴 하지만 멤버 변수가 바뀔 경우 다시 코드를 생성해야한다. 이런 불편함을 해소해주는 것이 lombok이다. @Getter, @Setter 같이 어노테이션만 추가해 주면 자동으로 Getter, Setter 생성이 된다.dependency 추가 org.projectlombok lombok 1.18.2 provided 이렇게 의존성만 추가해서는 어노테이션 적용이 되지 않는다. IDE에 추가 설치가 필요하다.설치된 경로 C:\Users\USER\.m2\repository\org\projectlombok\lombok\1.18.2에 가서..
AutoCloseable
·
Language/Java
[Java]Autoclosable java6 이전까지는 close 메서드를 호출하여 안전하게 리소스를 닫아주어야 했다.​x//JAVA6 이전 ...Class.forName("com.mysql.jdbc");try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(jdbcUrl, urerId, passWord); ps = conn.prepareStatement(sql);​ //.....​} catch (SQLException e) { e.printStackTrace();} finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStac..