본문 바로가기

백엔드개발자9

Optional이 뭔데? 왜 쓰는데? 1) Optional을 쓰는 이유 - 어떤 객체를 조회하여 객체 내부의 값을 가져오려고 할때 해당 값이 존재하지 않는다면 NullPointerException이 발생하는 것을 자주 마주칠 것이다. 아래의 코드처럼 말이다. 예시코드(문제 제기) public class OptionalExample{ public static void main(String[] args) { Friend myFriend = findByName("Kim"); System.out.println(myFriend.getAge()); } private static Friend findByName(String name){ Friend friend = friendRepository.findByName(name); return friend; .. 2023. 6. 23.
21. 값 타입(4) - 값 타입과 컬렉션 0. 개요 - 이번 포스팅에서는 값 타입을 사용한 collection에 대해서 알아보려 한다. - 결론부터 말하면 값 타입 collection은 사용하지 않는다. - 값 타입 collection이 무엇인지, 왜 사용하지 않는지에 대해서 알아보자. 1. 값 타입과 collection 사용법 - 이전 포스팅에서 일대다(1:N) 관계를 표현할 때, Entity를 collection에 담아서 사용해본 적이 있다. - 값 타입 또한 collection에 담아서 사용할 수 있는데, 그 방법에 대해서 알아보자. a) 예시 케이스 - 예를 들어, 위의 사진과 같은 축구 선수 Entity를 구성하려고 한다. → Player는 Entity이다. → Game은 출전한 경기를 기록하는 값 타입이다. → preferPos는 선.. 2022. 4. 19.
8. 양방향 연관 관계의 기본 개념 0. 개요 - 이번 포스팅은 양방향 연관 관계에 대해 알아보도록 하자. 1. 양방향 연관 관계 - 단방향 연관 관계에서 사용했던 예시를 확장하여 양방향 연관 관계로 만들어보자. a) 관계 예시 - 구현하려는 양방향 연관 관계는 아래의 테이블과 같다. - 이전 포스팅에서 단방향 연관 관계를 설명할 때의 구조와 동일한 테이블 구조다. - 분명 양방향 연관 관계를 구현한다고 했으나 왜 동일한 테이블을 사용할까? - 그 이유는 RDB는 FK를 이용한 Join으로 양방향 연관 관계를 형성한다. - 즉, RDB는 양방향 연관 관계를 기본으로 한다. - 다만 객체의 관점에서 보았을 때 연관 관계의 방향성이 유의미하다. b) 양방향 연관 관계란? - 위의 테이블 구조를 예시로 생각해보자. - Player 테이블의 FK.. 2022. 3. 31.
8. Bean 자동 등록 0. 개요 - 이전 포스팅에서 AppConfig 설정 파일을 이용하여 객체를 Spring Container에 Bean을 등록시키는 방법을 배웠다. - 이처럼 AppConfig 파일을 사용하여 직접 Spring Bean을 명시하는 방법을 Bean 수동 등록이라고 한다. - 실무에서는 수십, 수백 개의 Bean을 구성하여 프로젝트를 만든다. - 그러므로 수 많은 Bean을 AppConfig에 일일이 작성하고 관리하는 것은 비효율적이다. - 수 백줄의 AppConfig 파일에서 Bean의 역할과 의존관계를 개발자가 한번에 이해하고 수정하기 어렵기 때문이다. - 그래서 현업에서는 AppConfig보다 Spring에서 제공하는 Bean 자동 등록 기능을 중점적으로 사용한다. 1. Bean 자동 등록 - AppCo.. 2022. 2. 7.
5. Spring Container 0. 복습 - 이전 포스팅에서 Spring을 사용해야 하는 이유에 대해서 알아보았다. - java만으로 객체지향 프로그래밍의 원칙(SOLID)을 온전히 구현할 수 없기에 AppConfig 설정 파일을 사용하여 구현체 간의 의존관계를 설정하고, 이 의존관계를 외부에서 주입(DI)하는 방식을 사용했다. - 그로 인해 프로그램의 전체적인 흐름이 프로그램 내부에 의해 결정되는 것이 아닌, 외부의 설정 파일(AppConfig)에 의해 결정되는 IoC의 특징에 대해 알 수 있었다. - 그렇다면 Spring에서 SOLID, DI, IoC, AppConfig 등의 개념을 어떻게 사용하는지 알아보자. 1. Spring Container - AppConfig의 역할(구현체의 생성, 관리 그리고 의존관계 형성)을 하는 대상.. 2022. 1. 31.
Java의 기본 자료형(Primitive) 1. 정수형(short, int, long) a) Java가 숫자 계산을 하는 방법 - Java는 숫자 연산을 int형으로 변환하여 계산한다. 즉, int형 연산을 기본으로 한다. - short 자료형의 변수 2개를 더한다고 하더라도 연산 시 int로 변환하여 계산하고, int형으로 결과를 반환한다. public class MyClass { public static void main(String args[]) { short num1 = 10; short num2 = 10; short num3 = num1 + num2; System.out.print(num3); } } - 이처럼 short 자료형이지만, Java가 연산을 할 때에는 int로 계산이 되기 때문에 위와 같은 에러가 발생한다. - 즉, 작은 자.. 2022. 1. 28.
변수와 리터럴에 대하여 1. 변수(Variable) a) 개념 정의 - 변수는 데이터를 저장하기 위해 할당된 메모리 공간에 붙여지는 이름이다. - 다음 예시를 보자. int num = 1; - 변수를 선언하여 1이라는 숫자는 메모리의 어떤 공간에 저장되었다. - 이 메모리 공간은 16진 수로 된 일련번호를 갖는다. ex) 1b3A1211 - 저장된 데이터(1)를 찾기 위해서 매번 16진수의 메모리 주소 값을 기억하는 것은 무리가 있으며, 가독성이 떨어져 비효율적이다. - 그러므로 이 메모리 공간에 대한 주소값을 대신한 이름을 붙이는데, 이것이 변수다. b) 변수 정의 시 주의사항 - 변수의 이름은 숫자로 시작할 수 없다. - 변수의 이름에는 $와 _(언더바) 외 다른 특수문자는 사용할 수 없다. - 이미 Java에 정의되어 있.. 2022. 1. 27.
4. Spring을 사용하는 이유 0. 개요 - 이전 포스팅에서 좋은 객체지향 프로그래밍을 위한 SOLID 원칙을 배웠다. - 이제 SOLID만 따른다면, Java를 사용해 온전한 객체지향 프로그래밍을 구현할 수 있을까? 1. Java는 SOLID 원칙을 지킬 수 없다. - Java만을 이용해서 SOLID 원칙을 구현하는 것에는 문제가 있다. - 무엇이 문제인지 알아보자. a) OCP와 DIP원칙의 위배 - Java만을 이용하여 객체지향 프로그래밍을 만들다 보면 OCP와 DIP원칙을 위반하게 된다. - 간단한 예제를 살펴보자. public class ServiceImpl implements Service { private final Repository repository = new MemoryRepository(); } - 위의 예시에서.. 2022. 1. 27.
3. SOLID 원칙 1. 좋은 객체지향 프로그램을 만드는 방법 - 이전 포스팅에서 좋은 객체지향이란 다형성을 잘 유지하며 개발하는 것이라고 했다. - 단순하게 역할과 구현을 분리하면 되는것 아닌가? 생각할 수 있다. - 그러나 프로그램의 사이즈가 커질수록, 코드가 서로 얽히면서 객체지향을 유지하기 어려워진다. - 이처럼, 큰 규모의 프로그램에서도 좋은 객체지향 프로그래밍을 할 수 있도록 제시된 규칙이 있다. 2. SOLID 원칙 a) 개요 - 클린 코드의 저자인 Robert Martin이 정리한 좋은 객체지향 프로그래밍의 5가지 원칙 - SOLID는 다섯가지 원칙의 앞글자를 따서 만들어진 이름이다.(SRP, OCP, LSP, ISP, DIP) b) SRP(Single Responsibility Principle, 단일 책임.. 2022. 1. 26.