SOLID BASIC
[JAVA] 람다식이란? 람다식 사용 방법에대해 알아보자!
람다식이란? 람다식이란 "식별자없이 실행가능한 함수"이다. 함수인데 함수를 따로 만들지 않고 코드한줄에 함수를 써서 그것을 호출하는 방식이라고 생각하시면 된다. 함수적 프로그래밍을 위해 자바 8부터 람다식(Lambda Expressions)을 지원하면서 기존의 코드 패턴이 많이 달라졌다. 람다식 사용법 (매개변수, ...) -> { 실행문 ... } (매개변수, ...)는 오른쪽 중괄호 { } 블록을 실행하기 위해 필요한 값을 제공하는 역할을 한다. 매개 변수의 이름은 개발자가 자유롭게 지정할 수 있으며 인자타입도 명시하지 않아도 된다.-> 기호는 매개 변수를 이용해서 중괄호 { } 바디를 실행한다는 뜻으로 해석하면 됨. 예제 @FunctionalInterface interface Say{ int som..
[JAVA] 스트림(Stream)이란 무엇일까?
Stream의 특징 기능적인 측면에서 스트림은 컬렉션(배열 포함)의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다. import java.util.*; public class Main { public static void main(String[] args) { List list = Arrays.asList(1, 2, 3); Iterator it = list.iterator(); while (it.hasNext()) { int num = it.next(); System.out.println(num); } } } 정수가 있는 리스트를 하나씩 순회하면서 값을 출력하는 단순한 코드이다. 이를 스트림으로 바꿔 보자. import java.util.*; import java.util.s..
[JAVA] 내부 클래스(inner class)와 익명 클래스(anonymous class)에대해 알아보자
내부 클래스(inner class)는 사실 클래스 내에 선언된다는 점을 제외하고는 일반적인 클래스와 다르지 않다. 내부 클래스에는 인스턴스 클래스, 스태틱 클래스, 지역 클래스, 익명 클래스의 종류로 나눌 수 있다. 목차 1. 내부 클래스란? 2. 내부 클래스의 종류와 특징 3. 내부 클래스의 선언 4. 내부 클래스의 제어와 접근성 5. 익명 클래스(anonymous class) 1. 내부 클래스란? 내부 클래스는 클래스 내에 선언된 클래스입니다. 한 클래스를 다른 클래스의 내부 클래스로 선언하면 두 클래스의 멤버들 간에 서로 쉽게 접근할 수 있다는 장점과 외부에는 불필요한 클래스를 감춤으로써 코드의 복잡성을 줄일 수 있다는 장점을 얻을 수 있습니다. 내부 클래스의 장점 내부 클래스에서 외부 클래스의 멤..
[자바/ 자료구조] 컬렉션 프레임워크 공부 전, 자료구조를 간단히 정리해보자!
컬렉션 프레임워크 공부 전 자료구조 개념 정리의 필요성을 느꼈다! 지금부터 간단하고 확실하게 개념을 짚고 넘어가보자! 배열 Array 같은 형의 데이터 타입을 메모리에 저장하는 선형적 자료구조 논리적 구조와 물리적 구조가 동일하다. -> 배열은 Fixed-length이다. (고정된 길이) -> 인덱스 연산이 가능하다. 데이터의 크기 만큼의 오프셋으로 요소의 위치 계산이 가능하다. 논리적, 물리적 주소가 동일하니까 계산 가능! -> Insert / Delete 에 필요한 연산이 배열 전체 요소의 개수에 의존한다. (n개에 Dependent 하다.) / O(n) -> ArrayList / Vector 연결 리스트 Linked List 데이터와 링크로 구성되어 있다. -> IO가 많이 일어나는 경우 사용하면 ..
[SPRING 기본] 비즈니스 요구사항을 설계하며 스프링 핵심 원리를 이해해보자!
1. 비즈니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1,000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 도민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다. (미확정) 참고: 프로젝트 환경설정을 편리하게 하려고 스프링 부트를 사용한 것이다. 지금은 스프링 없는 순수한 자바로만 개발을 진행한다는..
[SPRING 기본] 객체 지향 설계와 스프링 강의 내용을 복기해보자!
1. 스프링의 역사 로드 존슨이 2002년 라는 저서를 EJB의 문제점을 지적하며 출간하였는데, 이때 선보인 코드가 기초가 되었으면 이게 바로 스프링이 되었다. EJB 없이도 충분히 고품질의 확장 가능한 애플리케이션을 개발할 수 있음을 보여주고, 30,000라인 이상의 기반 기술을 예제 코드로 선보였다. 여기에 지금의 스프링 핵심 개념과 기반 코드가 들어가 있다. ( BeanFactory, ApplicationContext, POJO, 제어의 역전, 의존관계 주입 등 ) 책 출간 직후 유겐 휠러, 얀 카로프가 로드 존슨에게 오픈소스 프로젝트를 제안했고, 스프링의 핵심 코드의 상당수는 유겐 휠러가 지금도 개발하고 있다...
[SPRING 기본] 좋은 객체 지향 설계의 다섯 가지 원칙
영한님의 스프링 강의를 공부하다가 객체 지향 설계 원칙의 중요성에 대해 거듭 강조하셔서, 이를 블로그와 머릿속에 기록해두려고 한다. 어렴풋이 들어왔지만 정확히 무엇인지는 몰랐던 객체 지향 설계의 다섯 가지 원칙에 대해 알아보자! 좋은 객체 지향 설계의 5가지 원칙 SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향의 원칙을 다섯 가지로 정리했다. SRP(Single Responsibility Principle) 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. - 클 수도, 작을 수도 있다. - 문맥과 상황에따라 다르다. 중요한 기준은 변경이다. - 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것이다. - 예를들면 객체의 생성과 사용을 분..
[SPRING 입문] 2. 스프링 웹 개발 기초
1. 정적 컨텐츠 스프링 부트 정적 컨텐츠 기능 https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-static-content resources/static/hello-static.html static content 정적 컨텐츠 입니다. 실행 http://localhost:8080/hello-static.html 2. MVC와 템플릿 엔진 MVC: Model, View, Controller Controller @Controller public class HelloController { @GetMapping("hello-mvc") public S..
[SPRING 입문] 1. 프로젝트 환경 설정
1. 프로젝트 생성 사전 준비 Java 11 설치 IDE: IntelliJ 또는 Eclipse 설치 (저는 IntelliJ IDEA Ultimate 버전으로 진행하였습니다.) 주의! 가급적 JDK 11버전을 설치를 권장한다. 다른 버전을 설치하면 정상 작동하지 않을 가능성이 높음. 프로젝트 선택 Project: Gradle Project Spring Boot: 2.3.x Language: Java Packaging: Jar Java: 11 Project Metadata groupId: hello artifactId: hello-spring Dependencies: Spring Web, Thymeleaf Gradle 전체 설정 build.gradle plugins { id 'org.springframewo..
[JAVA] Optional이란? | Optional 개념 및 사용법
1. Optional이란? Optional 개념 및 사용법 [ NPE(NullPointerException) 이란? ] 개발을 할 때 가장 많이 발생하는 예외 중 하나가 바로 NPE(NullPointerException)이다. NPE를 피하려면 null 여부를 검사해야 하는데, null 검사를 해야하는 변수가 많은 경우 코드가 복잡해지고 번거롭다. 그래서 null 대신 초기값을 사용하길 권장하기도 한다. List names = getNames(); names.sort(); // names가 null이라면 NPE가 발생함 List names = getNames(); // NPE를 방지하기 위해 null 검사를 해야함 if(names != null){ names.sort(); } [ Optional이란? ]..