개발
-
의존성을 '조절'하기 위해 인터페이스와 구현을 분리하자개발/OOP, Design Pattern 2021. 2. 21. 00:56
조영호님의 오브젝트 챕터1 을 읽고 배운점 객체지향은 객체의 자율성을 높여 응집성을 높이고, 객체간의 의존성을 조절 하여 이해하기 쉽고 변경하기 쉬운 코드를 작성하는 것이 중요하다. 그런데 왜 객체간의 의존성을 '낮추는 것'이 아닌 '조절' 일까? 자율성을 높여보자 다음과 같이 매표원 역할을 하는 TicketSeller 클래스가 있다. 이 클래스는 표를 판매하기 위해 TicketOffice 를 가지고 Audience 파라미터를 참조한다. 의존성 측면에서 보면 문제가 없어보이지만, TicketSeller가 임의로 TicketOffice의 상태를 변경하고 있다. public class TicketSeller { private TicketOffice ticketOffice; public void sellTo(..
-
[live-study] 12. 어노테이션 (Annotation)개발/Java 2021. 2. 20. 21:25
Annotation 목표 자바의 애노테이션에 대해 학습하세요. 학습할 것 (필수) 애노테이션 정의하는 방법 @retention @target @documented 애노테이션 프로세서 어노테이션 이란? 어노테이션은 코드에 넣는 주석이라고 보면 되고, 컴파일 과정이나 실행 중 코드를 어떻게 처리할지 알려주는 메타데이터다. 이 자체는 기능을 가지지 않는다. 즉, 런타임중에 알아야하는 데이터는 못들어간다. 컴파일러 수준에서 해석되거나 완전히 정적이어야 한다. Spring MVC 에서 @GetMapping(변수) 가 불가능하다. 컴파일 과정이나 실행 중 코드를 처리하는 것은 보통 다음 3가지 이다. 컴파일러가 문법 오류를 체크할 수 있도록 정보 제공 (@Override) 소프트웨어 개발 툴이 빌드나 배치시 코드를..
-
[live-study] 11. enum개발/Java 2021. 2. 20. 21:24
live-study 11주차 목표 자바의 열거형에 대해 학습하세요.학습할 것 (필수) enum 정의하는 방법 enum이 제공하는 메소드 (values()와 valueOf()) java.lang.Enum EnumSet enum enum(열거형) 이란? enum은 계절 이나 요일 처럼 하나의 집합을 상수로 정의할 수 있는 특별한 데이터 타입이다. 상수를 정의한다고 해서 서로 아무 관련이 없는 상수들을 정의해놓는 것은 바람직 하지 않다. 예를 들어 JAVA_VERSION 과 OS_VERSION 를 묶는 것은 바람직 하지 않다. 정의한 상수는 하나의 타입이 되어 type-safety하게 코드를 작성할 수 있게 해준다. enum 정의하는 방법 클래스나 인터페이스와 같은데, class/interface 키워드 대신..
-
[live-study] 10. 멀티쓰레드개발/Java 2021. 1. 23. 13:02
멀티쓰레드 프로그래밍 프로세스(Process)와 스레드(Thread)란 무엇인가? 스레드를 알기 전에, 프로세스를 먼저 알아야 한다. 프로세스는 운영체제에서 실행중인 (보통)하나의 응용 프로그램 단위를 말한다. 하나의 응용 프로그램을 실행하면 운영체제로부터 그에 필요한 메모리를 할당받아 독립적인 공간을 가지고 있다. 스레드는 프로세스가 가지는 작은 프로세스이자 하나의 실행 환경이라고 볼 수 있다. 프로세스는 최소 하나의 스레드를 가지며, 자원을 공유한다. (메신저에서 파일을 보내는 것, 메세지를 보내는 것 각각이 스레드라고 볼 수 있다.) 프로세스 내부에서 이러한 스레드가 여러개 존재하면 멀티 스레드이다. Main 쓰레드 우리가 자바 애플리케이션을 실행시키면 가장 먼저 main() 메소드를 실행시킨다. ..
-
[live-study] 9: 예외 처리개발/Java 2021. 1. 14. 18:01
live-study 목표 자바의 예외 처리에 대해 학습하세요. 학습할 것 (필수) 자바에서 예외 처리 방법 (try, catch, throw, throws, finally) 자바가 제공하는 예외 계층 구조 Exception과 Error의 차이는? RuntimeException과 RE가 아닌 것의 차이는? 커스텀한 예외 만드는 방법 예외 처리 예외(Exception) 란? 사용자의 잘못된 조작이나, 개발자의 잘못된 코딩으로 발생하는 프로그램 오류다. 예외가 발생하면 프로그램이 곧장 종료된다. 그러나 예외 처리를 하면 프로그램을 종료하지 않고 실행 상태를 유지할 수 있다. 에러(Error)와의 차이점 컴퓨터 하드웨어 오작동이나 고장으로 인한 프로그램 실행 오류는 에러라고 한다. 에러가 발생하면 JVM 실행에..
-
[자바8] 함수형 인터페이스와 람다식개발/Java 2021. 1. 13. 01:50
함수형 인터페이스와 람다 표현식 함수형 인터페이스와 람다 표현식이란? 인터페이스에 추상메소드가 하나만 있는 것을 말함 (2개 있으면 X) 디폴트나, 스태틱 메소드가 있는건 괜찮다. 함수형 인터페이스를 정의할일이 있으면 견고한 관리 위해 @FunctionalInterface 어노테이션을 붙여주자. (이런 어노테이션을 조작방법은 코드를 조작하는 다양한 방법 참고) 함수형 인터페이스를 정의했다면 구현하는게 람다 표현식이다. 마치 인터페이스 타입의 참조변수에 함수를 정의한 것 처럼 보인다. 특징 함수를 First class object로 사용 First Class Object = First Class Citizen (일급시민) 참고 고차함수가 되어 함수가 함수를 매개로 받거나 리턴 값으로 보내는게 가능해진다. ..
-
@Controller, @RestController, @RequestMapping, @ResponseBody개발/Spring 2021. 1. 11. 16:52
@Controller, @RestController Spring MVC는 request mapping, request input, exception handling등에 사용되는 @Controller와 @RestController를 제공한다. @Controller는 @component 를 구체화(specialization) 한 것인데, @coponent는 구현 클래스들을 classpath scanning 을 통해 자동으로 탐지되게 해주고, bean 에 자동으로 등록시킨다. @RestController는 @Controller와 @ResponseBody로 구성된 Coposed Annotation 이다. 즉 바로 Response body를 작성하고 HTML로 렌더링한다. @Controller와 @Response..