본문 바로가기

백엔드132

추상 클래스와 인터페이스의 차이점 추상클래스 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우 추상클래스를 상속받은 클래스들이 공통으로 가지는 메소드와 필드가 많거나, public 이외의 접근제어자(protected, private) 사용이 필요한 경우 non-static, non-final 필드 선언이 필요한 경우. 즉, 각 인스턴스에서 state 변경을 위한 메소드를 선언할 수 있다. 인터페이스 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우에 사용한다. 예를 들어, Comparable, Cloneable 인터페이스는 여러 클래스들에서 구현되는데, 구현클래스들 간에 관련성이 없는 경우가 대부분이다. 특정 데이터 타입의 행동을 명시하고 싶은데, 어디서 그 행동이 구현되는지는 신경쓰지 않는 경우. 다중상속을 허용하고 싶.. 2020. 5. 5.
멀티스레드 환경에서의 Thread-safe 테스트 멀티스레드 환경에서의 Thread-safe 테스트 스프링 프레임워크의 기본 bean scope 는 singleton 이며, 멀티스레드 환경에서 클래스내의 멤버변수로 인한 데이터가 꼬이는 문제가 발생한다. 가능하면 멤버변수는 DI 를 하는 bean 외에는 사용하지 않는것이 정신 건강에 좋다. 또한, bean scope 를 prototype 으로 구성하면 생명주기를 스프링 프레임워크가 관리하지 않기 때문에 객체 사용이 끝나면 직접 소멸시켜줘야 한다. 그러지 않으면 스레드 락이 생겨 애플리케이션 성능에 심각한 문제가 발생한다. 아래 4개 클래스를 생성후, StaticMethodMultiThreadTest 를 실행하여 멤버변수의 위치에 따른 결과값을 테스트한다. public class Member { Strin.. 2020. 2. 16.
Jedis Pool 최적화 - JedisPool - redis connection pool (레디스 커넥션 풀) https://partners-intl.aliyun.com/help/doc-detail/98726.htm 에 있는 JedisPool optimization 영문 내용을 번역하였습니다. JedisPool optimization - ApsaraDB for Redis - Alibaba Cloud Documentation Center You can set JedisPool parameters to proper values to improve Redis performance. This topic describes how to use JedisPool and configure the resource pool parameters. This topic also describes the recommended settin.. 2020. 2. 2.
StringBuffer vs StringBuilder StringBuffer Thread-Safe 함 StringBuilder Thread-Safe 하지 않음, 단 전역변수(멤버변수)가 아닌 지역변수로 사용할 경우는 문제없음, 즉 메서드 안에서 선언하고 사용하면 안정함. StringBuffer보다 성능이 좋음 2020. 1. 27.
int vs Integer int (Primitive 자료형 (long, float, double,. ....)) 자료형 실제 값을 저장하고 있음. 산술 연산이 가능. null 로 초기화 불가능, 0으로 초기화 Integer (Reference Type / Wrapper 클래스(객체)) 클래스 실제 값이 아닌 객체의 주소를 저장하고 있음. Unboxing 을 하지 않으면 산술 연산이 불가능하지만, null값은 처리할 수 있음. null값 처리가 용이해서 SQL 과 연동할 경우 처리가 용이. 직접적인 산술연산은 불가능 primitive wrapper 클래스 자바의 기본 자료형을 클래스로 정의하여 객체 단위로 처리할수있도록 제공하는 클래스 기본형 타입(primitive Type)의 데이터를 객체로 사용할수있도록 API에서 제공하는 클.. 2020. 1. 27.
728x90