본문 바로가기

Java13

[Java] 리플렉션(Reflection) 이란? (feat. 어노테이션) 리플렉션 (Reflection) JVM은 클래스 정보를 클래스 로더를 통해 읽어와서 해당 정보를 JVM 메모리에 저장한다. 저장된 클래스 정보가 마치 거울에 투영된 모습과 닮아있어, 리플렉션이라 불린다. 리플렉션을 사용하면 생성자, 메소드, 필드 등 클래스에 대한 정보를 아주 자세히 알아낼 수 있다. 대표적으로 여러 라이브러리, 프레임워크에서 사용되는 어노테이션(@)이 리플렉션을 사용한 예시이다. 리플렉션을 사용하면 클래스와 메소드에 어떤 어노테이션이 붙어 있는지 확인할 수 있다. 어노테이션은 그 자체로는 아무 역할도 하지 않는다. 리플렉션으로 @Component, @Bean 과 같은 어노테이션을 프레임워크의 기능을 사용하기 위해 사용할 수 있는 것이다. 리플렉션을 사용하면 접근 제어자와 무관하게 클래스.. 2023. 12. 6.
[Java] int vs. Integer (feat. wrapper class) int 와 integer는 같은거라 생각했지만 Java 에서는 다르다고 한다. int는 변수의 타입(자료형)이다. 자료형은 기본형(primitive type), 참조형(reference type)으로 나뉘고, int는 이 중에서 기본형에 속한다. 그럼, Integer는 뭘까? Integer는 int의 wrapper 클래스 이다. wrapper 클래스는 기본 자료형을 객체로 다루기 위해 사용하는 클래스를 의미한다. 기본 자료형을 객채로 다룬다? 무슨 말이지? * 매개변수로 객체를 필요로 할때 * 기본형 값이 아닌 객체로 저장해야할때 * 객체 간 비교가 필요할때 프로그래밍을 하다보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 있다. 이 때 기본 자료형을 객체로 다루기 위해서 사용하는 클래스들을 wra.. 2023. 12. 4.
[Java] logger(slf4j, log4j), system.out.println() 지난 게시글에서 콘솔에 로깅을 할때 사용하는 system.out.println() 메소드를 직접 확인해보며 실제 운영 중인 서버에서는 사용하지 않아야 한다고 정리했다. 그리고 일반적으로 개발자들이 로깅을 할때 logger를 사용하는 것을 추천한다고 했다. 그런데 logger 또한 서버의 성능에 영향을 미치지는 않을까? 왜 logger를 사용해야하지? 에 대해 추가적으로 고민해보지 못했다. 어떤 시스템을 개발하던 반드시 로그를 남겨야 한다. 소프트웨어 개발 과정 혹은 개발 후에 동작 상태를 파악하고, 문제가 발생했을 때 진단하고 해결하는데 도움이 되기 때문이다. 로그를 남기는 방법에는 시스템 로그(system.out.println), logger(slf4j, log4j) 등 여러가지가 있겠지만, 어떤 lo.. 2023. 11. 27.
[Java] hashcode() (feat. equals()) hashCode hashcode 메소드는 객체의 주소값을 변환하여 생성한 객체의 고유한 정수값이다. 따라서 두 객체가 동일 객체인지 비교할 때 사용할 수 있다. 서로 다른 Book 객체는 주소값이 다르기에 hashCode가 다르다. 서로 다른 String 객체도 문자열이 같으면 hashCode가 같다. 그렇다면 hashCode()와 equals()는 어떤 관계를 가지고 있을까?? 동일한 객체는 동일한 메모리 주소를 가진것 처럼 보겠다(동일성)라는 것을 의미하므로, 동일한 객체는 동일한 해시코드를 가져야 한다. equals와 hashCode의 관계를 정의하면 다음과 같다. 두 객체가 equals()에 의해 동일하다면, 두 객체의 hashCode() 값도 일치해야 한다. 두 객체가 equals()에 의해 동.. 2023. 11. 22.