용로그
article thumbnail
[Java] 상속과 조합 고민해보기
Java 2023. 3. 9. 15:23

상속(Inheritance)과 조합(Composition)은 객체지향 프로그래밍(OOP)에서 객체 간의 관계를 나타내는 데에 있어서 중요한 개념이다. 이번 글에서는 두 가지 개념의 차이점과 장단점에 대해서 알아보자. 상속(Inheritance) 상속은 객체지향 프로그래밍에서 가장 기본적인 개념 중 하나다. 클래스 간의 부모-자식 관계를 정의하여 부모 클래스의 속성과 메서드를 자식 클래스에서 재사용 할 수 있도록 한다. 이렇게 상속을 통해 구현한 클래스를 서브 클래스(Sub Class) 또는 파생 클래스(Derived Class)라고 부르기도 한다. 보통 상속을 사용하는 방법은 아래와 같다. public class Person { private String name; private int age; publ..

article thumbnail
[Java] 개행(줄 바꿈)시 lineSeparator를 써야하는 이유
Java 2023. 3. 9. 14:04

"\n"의 문제점 String에서 줄바꿈은 Window에서 \r\n, Linux에서 \n으로 표현된다. 하지만 이런 방식은, 서로 다른 종류의 OS에서 동작하는 프로그램에서 문제가 발생할 수 있다. // Windows System.out.println("Hello\r\nWorld"); // Linux System.out.println("Hello\nWorld"); 그래서 뭐 쓰라고 System.lineSeparator()는 Java 1.7부터 사용할 수 있으며, 사용하면 시스템 종속적인 라인 세퍼레이터 문자열을 자동으로 반환하므로, 코드를 더욱 유연하게 만들어 줄 수 있다. 예를 들어, 다음과 같이 사용할 수 있다. String message = "Hello" + System.lineSeparator()..

article thumbnail
[Java] 싱글톤 패턴은 안티 패턴일까?
Java 2023. 3. 9. 13:39

우리가 프로그래밍을 하다 보면 싱글톤의 유혹을 버티지 못할 때가 있다. 싱글톤 자체의 의도는 메모리 절약이라는 좋은 근거가 될 수 있지만, 그로 인해 발생하는 문제점 또한 많은 편이다. 그래서 이번 글에서는 싱글톤의 장단점과 어떤 상황에서 안티 패턴으로 작용할 수 있는지를 알아보자. 안티패턴? 설계상의 문제로 인해 소프트웨어 시스템이 예상대로 작동하지 않거나 유지보수하기 어렵게 만드는 디자인 패턴이다. 싱글톤 패턴이란? 싱글톤은 객체지향 프로그래밍(OOP)에서 사용되는 디자인 패턴 중 하나다. 이 패턴은 Application에서 단 하나의 인스턴스만을 생성하고, 이 인스턴스를 전역에서 사용할 수 있도록 한다. public class Singleton { private static String instan..

article thumbnail
[Java] 정적 팩토리 메서드 사용기
Java 2023. 3. 3. 13:32

정적 팩토리 메서드란? 자바 프로그래머라면 한 번쯤 들어봤을 정적 팩토리 메서드에 대해서 알아보자. 정적 팩토리 메서드가 무엇일까? 말 그대로 메서드로 정적 인스턴스를 생성한다는 뜻일 것이다. 여기서 팩토리라는 용어가 조금 생소할 수 있다. GoF 디자인 패턴 중 팩토리 패턴에서 유래한 이 단어는 객체를 생성하는 역할을 분리하겠다는 취지가 담겨있다. 생성자 대신 정적 팩토리 메서드를 고려하자 Example 1) Dealer 좀 더 쉽게 말하면 객체 생성의 역할을 하는 것이 생성자가 아닌 메서드가 대신 해주는 것이다. 말로만 설명하면 뭐가 뭔지 이해하기 쉽지 않을 것이다. 아래의 코드를 보자. public class Dealer extends User { private static final int CAN..

article thumbnail
[DB] MySQL 아키텍쳐 파헤치기
Database 2023. 3. 2. 21:15

MySQL에서 손과 발의 역할을 담당하는 스토리지 엔진은 핸들러 API만 만족한다면 스토리지 엔진을 구현해서 누구나 MySQL 서버에 사용할 수 있다. 이번 글에서는 MySQL 엔진과 MySQL 서버에서 기본적으로 제공하는 InnoDB와 MyISAM 스토리지 엔진을 구분해서 알아보자. MySQL 엔진 아키텍쳐 MySQL 서버는 다른 DBMS에 비해서 구조가 독특하다. 그 이유가 무엇일까? MySQL 엔진 아키텍처가 다른 DBMS에 비해 독특한 이유는 아래와 같다. 다중 스레드 아키텍처를 사용한다. 이는 데이터베이스 서버가 여러 개의 작업을 동시에 수행할 수 있도록 하며, 따라서 처리 속도를 향상시킨다. InnoDB와 같은 트랜잭션 지원 스토리지 엔진을 사용한다. 이를 통해 MySQL은 데이터 무결성을 보..

article thumbnail
[Java] 매직 넘버 잘 처리하기
Java 2023. 2. 27. 15:46

매직 넘버 줄이기 프로그래밍에서 상수(static final)로 선언하지 않은 수나 문자열을 매직 넘버 또는 매직 리터럴이라고 한다. 단지 상수로 선언하지 않았다고 해서 매직 넘버나 매직 리터럴이 되는 것은 아니다. 게임으로 예를 들어보자 아래는 게임 플레이어의 체력을 감소시키는 메서드다. 근데 30과 100이 무엇을 뜻하는지 알 수 있겠는가? public void decreaseStrength() { this.health -= 30 * 100; } 잘 모르겠다면 아래의 메서드를 다시 보자. 훨씬 직관적이고 읽기 쉬운 코드가 되지 않았는가? 최소한 30과 100이 무엇을 뜻하는지 알 수 있게 되었다. 30과 100이 뭘 뜻하는지 안다면 플레이어의 체력을 감소시키는 메서드가 어떤 공식으로 계산되어 적용되는..

article thumbnail
[DB] 가용성과 데이터의 복제
Database 2023. 2. 9. 22:31

데이터베이스가 crash(손상)되었을 때 어떻게 해야 서비스를 다운시키지 않고 계속 운영할 수 있을까? 현재 가장 많이 사용하는 방법은 replication(복제)이다. 하지만 데이터베이스에 크래쉬가 일어났을 때 어느 정도의 데이터 로스(data loss)를 허용할지에 따라 방침이 변한다. 전형적인 장애 시나리오 장애 대책을 세워놓기 위해서는 어떤 장애가 일어날 수 있는지를 먼저 알아야 한다. 대표적인 장애 패턴을 알아보자 소프트웨어 장애 데이터베이스 프로그램의 폭주와 충돌처럼 소프트웨어 주변의 결함으로 인해 서비스를 제공할 수 없는 유형의 장애다. 문제의 심각성에 따라서 데이터 자체가 파괴되어 다시 시작되지 않는 등 치명적인 유효타를 받을 수 있다. 소프트웨어 장애는 그 소프트웨어의 품질이 장애 빈도와..

article thumbnail
[Test] 테스트 프레임워크 JUnit5, 어노테이션과 간단한 사용법
Java 2023. 1. 31. 18:55

JUnit이란? 현재 자바 개발자 90% 이상이 사용 자바8 이상부터 사용할 수 있는 단위테스트 프레임워크 스프링 부트 2.2 버전부터 기본으로 제공 JUnit5란? 기존의 JUnit은 하나의 .jar 파일로 의존성을 불러와서 다른 라이브러리를 참조해서 사용하는 구조였는데 JUnit5부터는 자체적으로 모듈화가 되어있다. JUnit5는 JUnit Platform + Jupiter + Vintage와 같다. 아래 사진과 같이 JUnit Platform 모듈 위에 Jupiter와 Vintage가 올릴 수 있는 구조이다. JUnit5 버전은 2017년 10월에 공개 Platform : JUnit으로 작성한 테스트 코드를 실행해주는 런처를 제공 Vintage : JUnit3, 4를 지원하는 TestEngineAP..

article thumbnail
[Spring Boot, Database] Spring Boot + Redis 제대로 활용하기(2)
Spring Framework 2023. 1. 18. 19:44

저번 포스팅에서는 레디스라는 데이터베이스 자체에 대해서 자세히 알아보았다. 이번 포스팅에서는 스프링 부트에서 레디스를 사용하는 법을 알아보자. Spring Boot에서 레디스 설정하기 스프링 부트에서 레디스를 사용하려면 build.gradle 파일에 레디스 의존성을 추가해줘야 한다. implementation 'org.springframework.boot:spring-boot-starter-data-redis' 그리고 사용할 레디스의 호스트와 포트를 지정해준다. application.yml 파일에 지정하며, 로컬에서 레디스를 사용한다면 localhost, 다른 서버나 도커 등을 사용한다면 그에 맞는 호스트로 설정해준다. default port는 6379이다. spring: redis: host: loca..

article thumbnail
[Spring] Spring Boot + Redis 제대로 활용하기(1)
Database 2023. 1. 18. 11:49

이번 포스팅에서는 우리가 많이 사용하지만, 어쩌면 잘 모를 수 있는 레디스에 관련해서 기술하려고 한다. 레디스는 요즘 거의 모든 서버에서 사용하다시피 핫한 인 메모리 데이터베이스다. 참고로 2023년 1월 db-engines.com 통계자료에서 Redis가 key-value DBMS에서 1위를 차지하고 있다. 많은 개발자들이 사용하는 만큼, 우리도 레디스가 뭔지 알아야하지 않겠는가!? 우선 레디스가 뭔지부터 간단하게 알아보자. 레디스(Redis)란? 레디스란 키(key)와 값(value)를 가진 NoSQL에 속하는 데이터베이스이다. 주로 비정형 데이터를 다루며 비관계형 데이터베이스다. 비정형 데이터? 식별 가능한 구조나 아키텍처가 없는 데이터 key, value 구조이기 때문에 쿼리를 사용할 필요가 없다..