무분별한 Getter & Setter 사용은 OOP 원칙을 위배한다.
·
Engineering Notes/Java & Spring
들어가기에 앞서, 우리는 Getter와 Setter에 대해 학습했다. OOP 원칙 중 캡슐화에 대해 인지하였고, 따라서 Setter 사용을 지양해야 한다는 것 정도는 이미 알고 있는 사실이다. 그렇다면 왜 Getter 사용도 지양해야 하는 걸까?또는, Setter를 지양해야 하는 명확한 이유는 뭘까?Getter와 Setter의 탄생 객체 지향은 정보 은닉에서 시작한다.객체 지향 언어의 장점은 물론 다양하겠지만, 가장 큰 장점 중 하나가 유연성이다. 이러한 설계 방식은 변화하는 요구사항에 쉽게 대응할 수 있도록 한다. 유연성을 가능하게 하는 요소는 무엇일까?바로, 1. 캡슐화 2. 상속 3. 다형성이다. 그중 캡슐화, 이하 정보 은닉은 내부 구현을 숨기고 필요한 부분만 외부에 공개하도록 한다. 외부 코드가..
[Spring] OOP: SOLID 원칙
·
Engineering Notes/Java & Spring
Object-Oriented Programming 👉 객체지향 프로그래밍을 위한 다섯 가지 중요한 설계 원칙을 SOLID 원칙이라고 한다. *더보기는 관련 예시임 1. Single Responsibility Principle (단일 책임 원칙)하나의 클래스는 단 하나의 책임만 가져야 한다.즉, 여러 기능을 한 클래스에서 처리하지 않는다.더보기✅ 정보 저장 기능과 정보 출력 기능을 별도의 클래스로 분리2. Open/Closed Principle (개방-폐쇄 원칙)확장에는 열려 있고, 수정에는 닫혀 있어야 한다.즉, 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있도록 설계한다.더보기✅ 조건문 대신, 인터페이스나 추상 클래스를 사용하여 새로운 기능을 확장3. Liskov Substitution Pri..
[Java] 제네릭과 명명 관례
·
Engineering Notes/Java & Spring
제네릭  제네릭은 용어에서 알 수 있듯이 범용적으로 사용하는 데 목적이 있다. 이는 메서드에 매개변수를 추가하는 것과 비슷한 맥락이지만 결정적인 차이가 있다.  메서드는 매개변수에 인자를 전달해서 사용할 값을 전달한다. 반면, 제네릭 클래스는 타입 매개변수에 타입 인자를 전달해서 사용할 타입을 결정한다.더보기를 생략한 Raw Type도 가능하지만 사용하지 않는다. Raw Type이 존재하는 이유는 과거 코드와의 하위 호환이 필요했기 때문에 지원할 뿐이다. 제네릭 명명 관례E - ElementK - KeyN - NumberT - TypeV - ValueS, U, V, etc.더보기타입 인자로 기본형(int)을 사용할 수 없으며, 대신 래퍼 클래스(Integer)를 사용한다.
[🦁2] Web App & Spring MVC #2
·
Engineering Notes/Java & Spring
이번 포스트에서는 `스프링 MVC 동작 원리와 구현`을 다룹니다.학습 순서웹 애플리케이션 기본 원리스프링 MVC 동작 원리와 구현 📍 객체 지향 설계 원칙 (다음 주 예정)📚 세부 학습 순서Spring MVC 동작 원리DispatcherServlet의 역할 & 동작 방식Controller, View Resolver와의 관계Spring MVC 요청 처리 흐름 (Controller → Service → Repository)Spring을 활용한 REST API 구현REST의 특징 (HTTP 메서드, REST 제약 조건)@RestController와 REST API 구현Spring MVC 동작 원리DispatcherServlet의 역할 & 동작 방식  Spring MVC의 핵심 컴포넌트라고 할 수 있는 Di..
[🦁2] Web App & Spring MVC #1
·
Engineering Notes/Java & Spring
이번 포스트에서는 `웹 애플리케이션 기본 원리`를 다룹니다.학습 순서웹 애플리케이션 기본 원리 📍 스프링 MVC 동작 원리와 구현객체 지향 설계 원칙 (다음 주 예정)*본 포스트에서 `더보기`는 추가 설명임📚 세부 학습 순서웹 애플리케이션의 기본 원리웹 애플리케이션프로토콜 (HTTP, HTTPS)Web Server와 WAS3계층 아키텍처스케일링 (아키텍처의 확장)웹 애플리케이션의 기본 원리웹 애플리케이션 🔹 Web App이란 `클라이언트`와 `서버` 간의 상호작용을 통해 동작하는 애플리케이션이다.클라이언트: 주로 사용자가 요청하는 `웹 브라우저`서버: 요청을 처리하는 `웹 서버`와 `WAS`🔹 웹 애플리케이션은 주로 `HTTP 프로토콜`을 이용하여 데이터를 주고받는다.클라이언트(웹 브라우저)가 U..
[Java] Stream API vs for-loop: Which One is More Efficient?
·
Engineering Notes/Java & Spring
개인 학습 목적 포스트입니다.GeeCon AngelikaLanger.com - Conference Video - GeeCon 2015 - The Performance Model of Streams in Java 8 - Angelika Langer - Angelika LaConference Video - GeeCon 2015 - The Performance Model of Streams in Java 8 - Angelika Langer   This presentation was recorded at the GeeCON 2015 conference in Kraków, Poland on May 13-15, 2015.  angelikalanger.com
[Java] BOJ 18870: 좌표 압축과 랭킹 알고리즘
·
Engineering Notes/Java & Spring
문제수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.이해하기좌표 압축을 적용한 값 X'i가  Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같다. 중복되는 원소가 같은 순위를 가진다는 점이 마치 SQL Server에서의 DENSE_RANK 느낌인데, 이 문제에서 추가로 고려할 점은 값이 작을수록 순위가 높다는 것과 가장 높은 순위는 0순위라는 점이다. 중복되는 원소를 같은 순위로 둔다는 점을 고려할 때, 일단 Set이나 Map을 활용..
큐 구현체 LinkedList vs ArrayDeque
·
Engineering Notes/Java & Spring
문제정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 여섯 가지이다.push X: 정수 X를 큐에 넣는 연산이다.pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.size: 큐에 들어있는 정수의 개수를 출력한다.empty: 큐가 비어있으면 1, 아니면 0을 출력한다.front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다. BOJ에서 제공하는 큐 문제다. LinkedList와 ArrayDeque 모두 큐 자료구조를 구현할 ..