전체 글
-
JdbcTemplate 와 JDBC API의 비교개발/Spring 2021. 3. 1. 11:40
JdbcTemplate Spring에서 제공하는 클래스로 JDBC API의 불편함을 해소시켜주는 역할을 한다. (템플릿 메서드 패턴/ 전략 패턴이 사용됌) JDBC API vs JdbcTemplate JDBC API 는 자바로 데이터베이스에 접근할 수 있게 해주는 표준 인터페이스다. JAVA - JdbcTemplate - JDBC API - DB 의 단계로 생각할 수 있다. JdbcTemplate 로 해결할 수 있는 것 구조적인 반복의 해결 JDBC API 를 사용하면 try-catch 문을 만들고 Connection - Statement, 결과를 가져오기 위해 ResultSet 까지 생성 후 예외처리 과정을 매번 반복해야한다. 실제 작업과 무관한 코드가 많다. 그러므로 어떤 일을 하는 코드인지 단번에 ..
-
객체지향에서 메세지와 메소드는 다르다.개발/OOP, Design Pattern 2021. 2. 24. 10:51
객체지향에서 메세지와 메소드는 다르다. 객체지향에 입문해서 자료를 보다보면 메세지 라는 말을 많이 보게 된다. 예를 들어 객체의 상태를 직접 변경하지 않고, 어떤 작업을 요청하는 메세지를 보내야 한다 라는 식이다. 이렇게 보면 '아. 객체의 메소드를 사용해서 간접적으로 상태를 변경하라는 뜻이구나' 라는 생각이 든다. 그럼 왜 메소드를 쓰라고 하면 되지, 굳이 메세지를 보내라고 하는 걸까? 메소드는 메세지를 수신하는 방법이다. 다음과 같은 사람의 클래스가 있다고 가정하자. public abstract class Person { public abstract void sleep(); } 추상 클래스에 sleep() 이라는 추상 메소드가 정의되어 있고, 이것은 Person의 자식 클래스를 사용하는 사용자에게 s..
-
의존성을 '조절'하기 위해 인터페이스와 구현을 분리하자개발/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() 메소드를 실행시킨다. ..
-
투 포인터 알고리즘알고리즘/알고리즘 2021. 1. 20. 18:13
시간이 없어 상당히 날림으로 썼으며, 생각나면 수정할 예정 programmers.co.kr/learn/courses/30/lessons/67258 투 포인터 알고리즘 배열에 시작점/끝점 포인터를 설정하고 포인터들을 이동시켜가면서 부분 배열을 비교하며 원하는 결과를 도출한다. 백준2003 - 수들의 합2 문제 (www.acmicpc.net/problem/2003) N개의 수로 이루어진 수열 A에서 A[i]~A[j]의 합이 M이 되는 모든 경우의 수를 구하는 문제다. 즉 부분 수열이 M이 되는 모든 경우의 수를 구하는 것이다. 가장 쉽게 생각할 수 있는 것은 3중 for문을 사용하는 것이다. 모든 수열의 크기에 대해 시작점을 바꿔가며 전부 선형으로 비교해보는 것이다. // 초기 입력 int n = scann..