본문 바로가기

개발자 일지/Java13

[java] 동일성, 동등성 개념 및 equals, hashCode 최근 JPA 강의를 듣던 중 동일성과 동등성 개념 및 equals, hashCode에 대한 내용이 나왔습니다.예전에 배웠지만 또 가물가물해서 이번 기회에 제대로 정리해보려고 합니다.  [목차]동일성이란?동등성이란?equals와 hashCode동일성/동등성 테스트 예제1. 동일성이란?자바에서 동일성(Identity)이란 '==' 연산자를 사용하여 두 객체가 같은 메모리 주소를 참조하는지를비교하는 것을 의미합니다.즉, 두 객체가 메모리상에서 동일한 위치에 있는지 판단하는 것입니다.그래서 같은 타입이고 같은 값을 가지고 있더라도, 메모리 주소가 다르면 false를 반환하게 됩니다. String str1 = new String("hello"); String str2 = new String("hello"); Sy.. 2024. 10. 16.
[Java] Logback, SLF4J 기초, 사용 이유, 환경 설정 및 테스트 Java 개발시 로그 남길 때 많이 사용하는 Logback, SLF4J에 대해 알아보려고합니다.그리고 환경 설정 및 테스트 예제를 같이 포스팅해보겠습니다.  [목차]Logback, SLF4J란?Logback을 많이 사용하는 이유Logback 환경 설정 및 테스트1. Logback, SLF4J란? Logback은 자바 기반 로깅 프레임워크입니다.자바, 스프링 개발시 로그를 찍을 때 가장 많이 사용하는 프레임워크가 아닐까 싶습니다. Logback은 SLF4J(Simple Logging Facade for Java)를 구현한 구현체입니다.SLF4J는 로깅 프레임워크에 대한 추상화를 제공해 로깅 구현을 돕습니다. 이전에 Log4j가 많이 쓰였는데 지금은 Logback을 많이 사용하는 추세입니다. 2. Logba.. 2024. 10. 4.
멀티쓰레드환경,동시성제어 | AtomicInteger 활용하기 멀티쓰레드 환경에서 공유 리소스에 대한 동시성 제어가 필요한 예제를 알아본다. sychronized 등을 통한 동시성제어가 아니라 AtomicXXX 클래스(AtomicIntger)를 통해 동시성제어를 구현해본다. 1.멀티쓰레드 환경에서 item 리소스(공유변수)에 동시에 접근할 때 멀티쓰레드환경에서 2개 이상의 쓰레드가 item 변수에 동시에 접근하여 증가, 감소를 실행할 때 예제를 통해 상황을 구현한다. increase()를 1000번 실행시키고 decrease()를 1000번 실행시키면 item값은 0이 되어야 한다. 그러나 멀티쓰레드 환경에서는 결과가 다르게 나올 수 있기 때문에 동시성 제어가 필요하다. 일반적으로 synchronized 키워드를 메소드에 붙여주거나 임계영역(Critical Sect.. 2023. 10. 14.
[에러]java.lang.Integer cannot be cast to java.lang.String 해결방법 -java.lang.Integer cannot be cast to java.lang.String 해결방법을 알아본다. 1.에러 내용 캐스팅 대상이 Integer(int)인 경우 String으로 캐스팅할 때 (String)을 붙여 캐스팅하면 이 에러가 발생한다. 나는 프로젝트에서 map.get(값)으로 가져온 값이 int값인데 (String)map.get(값)으로 캐스팅하면서 발생했다. VO를 만들어 쓸 걸 그랬다. 2.해결 방법 String으로 캐스팅하려면 방법이 여러가지 있지만 보통 (String)으로 처리할 수 있다. 그러나 이건 캐스팅 대상이 문자열일 때 사용 가능하다. 캐스팅 대상이 실제로 Integer 타입이면 바로 (String)캐스팅시 저런 에러가 발생한다. 이럴 때 String.valueO.. 2022. 5. 27.
[ibatis]SELECT 결과가 이상할 때(remapResults 사용하기) -실무에서 ibatis 사용시 SELECT 쿼리 콘솔 결과와 실제 애플리케이션 출력 결과가 다른 문제를 발견하였다. -이 문제를 해결하기 위한 remapResults라는 아이바티스 xml 속성을 알아본다. 프로젝트가 오래된 시스템이라 아직도 ibatis를 사용한다. 사실 xml에 작성하는 쿼리들의 기본적인 속성들은 알아도 모르는 속성들이 상당히 많다. 대표적으로 어제 알게된 remapResults라는 속성... 쿼리... 위처럼 false로 잡혀 있었는데 이게 왜 잡혀있는지 궁금해하지 않았음에 반성한다ㅜㅜ 일단 발생한 문제는 다음과 같다. 메뉴를 클릭하면 조회할 데이터 리스트를 불러온다. 그때 저 위의 getList라는 이름의 쿼리를 사용한다. 그리고 리스트 위에 엑셀 다운로드 버튼이 있는데 이것을 클릭.. 2021. 4. 23.
[디자인패턴]빌더 패턴(Builder Pattern) -객체를 생성하는 패턴 중 하나인 빌더 패턴(Builder Pattern)을 알아본다. -빌더 패턴 이전에 객체를 생성하는 가장 일반적인 패턴인 점층적 생성자 패턴, 자바빈 패턴을 먼저 알아본다. -이번 포스팅은 기계인간 John Grib님의 블로그를 많이 참고하여 학습하였다.(출처는 아래에 표시) 빌더 패턴이란? 객체를 생성하는 방법은 여러가지가 있는데, 일반적으로 생성자에 인자를 넣어 인스턴스를 생성하는 방법이나 setter를 이용하는 자바빈 패턴을 많이 사용한다. 빌더패턴은 이런 패턴들의 단점을 좀 더 개선한 방법이다. 우선 빌더 패턴을 소개하기 전에 점층적 생성자 패턴, 자바빈 패턴을 소개한 후, 이들의 단점을 개선한 빌더 패턴을 마지막으로 소개한다. 점층적 생성자 패턴 생성자를 통한 인스턴스 생.. 2021. 3. 21.
깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy)의 이해 -자바에서 객체를 복사하는 두 가지 방법에 대해 알아본다. 디자인패턴 중 프로토타입 패턴을 학습하면서 깊은 복사, 얕은 복사의 개념이 나왔다. 이 기회에 제대로 알아볼 생각으로 글을 쓴다. 대충 알고 있었는데 예시를 작성하며 내부 동작 등을 제대로 파악해보려고 한다. 얕은 복사와 깊은 복사의 개념 얕은 복사(Shallow Copy)란 객체의 실제 값이 아닌 참조값(주소값)을 복사하는 것이다. 반면 깊은 복사(Deep Copy)란 참조값이 아닌 인스턴스를 새로 복사하여 아예 실제값을 복사하는 것이다. 밑의 예제로 설명하는 것이 더 이해가 쉽기 때문에 바로 예제로 들어간다. 얕은 복사(Shallow Copy) 우선 Fruit이라는 클래스를 다음과 같이 만든다. Fruit.java public class Fr.. 2021. 3. 15.
[디자인패턴]싱글톤 패턴(Singleton Pattern) -디자인패턴 중 싱글톤패턴에 대해 학습한다. 싱글톤패턴이란? 싱글톤패턴이란 객체를 하나만 생성하여, 이후 생성된 하나의 객체만을 참조하여 사용하는 패턴이다. new 연산자로 직접 인스턴스를 생성하지 못하게 하고, 인스턴스를 생성할 수 있는 static method를 만들어 이를 통해 인스턴스를 생성한다. 이 method를 여러번 사용하여도 매번 인스턴스가 새로 생성되어 heap 메모리에 올라가는 것이 아니라, 처음 호출시 단 한번만 메모리에 올라간 후 계속해서 그 인스턴스를 사용한다. 예제 학습 package Singleton; public class Singleton { //static method를 통해 접근해야 하기 때문에 인스턴스를 담을 변수를 static 변수로 선언한다 private stati.. 2021. 3. 8.
[디자인패턴]팩토리 메소드 패턴(Factory Method Pattern) -디자인 패턴 중 인스턴스 생성 여부를 팩토리 클래스에서 결정하는 팩토리 메소드 패턴을 알아본다. 팩토리 메소드 패턴이란? 인스턴스 생성을 팩토리 클래스라는 인스턴스 생성 전용 클래스를 만들어 필요에 맞게 인스턴스를 생성하는 방식이다. 인스턴스를 사용하는 클라이언트 및 어플리케이션 쪽에서 직접 생성하는 것이 아니라, 인스턴스를 생성하는 구체적인 클래스를 이용하여 따로 생성하는 것이다. 이렇게 하면 인스턴스 생성에 대한 내용이 바뀌더라도 팩토리 클래스만 수정하면 되기 때문에 객체지향적으로 설계할 수 있고 클래스 간의 결합도가 낮아져서 유지보수에도 효율적이다. 예제 내용 예제는 나이에 따른 처방 시스템을 변경하는 예제이다. 나이에 따라 baby, children, adult, oldman 타입으로 구분하여 .. 2021. 3. 7.
[디자인패턴]템플릿 메소드 패턴(Template Method Pattern) -디자인패턴 중 템플릿 메소드 패턴을 알아본다. 템플릿 메소드 패턴이란? 다른 디자인패턴에 비해 비교적 간단한 패턴 같다. 참고한 YABOONG님 블로그에 소개된 GOF 정의를 소개하자면, Defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithms structure. 라고 정의되어 있다. 슈퍼클래스의 한 메소드에 알고리즘 뼈대를 정의하고 서브클래스에 몇단계들을 맡긴다. 템플릿 메소드(뼈대를 정의한 메소드)는 서브클래스가 알고리즘 .. 2021. 3. 3.
JAVA JVM(Java Virtual Machine)의 개념, 구조, 작동과정 -컴파일된 파일을 실행하는 가상머신인 JVM(Java Virtual Machine)에 대해 알아본다. JVM이란? 컴파일러가 컴파일한 파일을 실행하는 가상 머신이다. '가상'의 머신이기 때문에 하드웨어적인 요소가 아니라 JDK에 포함된 일종의 프로그램이다. 개발자는 인간이 이해 가능한 영어로 자바 문법에 맞게 코드를 java파일로 작성한다. java파일은 컴파일러를 통해 자바 바이트코드로 작성된 class파일로 변환된다. 자바 바이트코드로 변환된 파일은 가상머신인 JVM이 해석할 수 있게 된다. 그렇기 때문에 JVM만 설치되어 있다면 어떤 운영체제(OS)에서도 실행가능하다. 기존의 C++같은 경우에는 컴파일한 파일이 OS에 종속된다. 예를 들어 리눅스기반 OS에서 개발하고 컴파일을 했다면 윈도우에서는 바.. 2021. 2. 27.
[디자인패턴]어댑터 패턴(Adapter Pattern) -디자인 패턴 중 어댑터 패턴에 대해 알아본다. 어댑터 패턴? 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환하는 패턴이다. 인터페이스 호환성이 맞지 않아 같이 사용할 수 없는 클래스를 연관 관계로 연결해서 사용할 수 있게 해주는 패턴이다. 블로그들을 보니 전기 콘센트와 플러그의 예시를 많이 든다. 한국의 가전제품은 220V이다. 110V가 표준인 일본의 제품을 한국에서 사용하기 위해서는 돼지코라는 어댑터가 필요하다. 이런 발상을 기반으로 패턴을 이해하면 도움이 될 것이다. 어댑터 패턴은 클래스방식과 객체방식이 있으며 우선 객체방식으로 예제를 만들었다. 예제 어댑터패턴을 활용한 간단한 예제를 만들어 보았다. 기존의 솔루션(OldSoultion) 이후 새로운 솔루션(NewSo.. 2021. 2. 22.
[디자인패턴]전략 패턴(Strategy Pattern) -디자인 패턴 중 전략패턴에 대해 알아본다. 전략패턴이란 전략패턴이란 특정 객체의 행위 알고리즘군을 각각 캡슐화하고 필요시에 객체지향 원칙을 위배하지 않고 교환해서 유연하게 사용할 수 있는 패턴이다. 여기서 행위 알고리즘 자체를 '전략'으로 표현하고, 이런 전략을 상황에 맞게 교체해주는 역할을 하는 클래스를 '컨텍스트'라고 표현한다. 컨텍스트는 클라이언트와 전략 사이에서 '접점'역할을 한다. 행위 알고리즘 자체는 인터페이스로 설계하고 각자 캡슐화된 행위로 구현한다. 예시 컴퓨터 백신 인스톨러 A, B가 있다고 가정하며 둘다 네이버백신을 설치하는 프로그램. 추후 요구사항이 B 인스톨러의 프로그램을 V3백신으로 바꿔달라는 요구사항이 들어온 경우 전략패턴으로 샤샤샥 바꾸는 예제 전략패턴 적용 전 예시 pack.. 2021. 2. 20.