분류 전체보기 290

1-3. 좋은 객체 지향 프로그래밍이란?

객체 지향 프로그래밍은 자바 기초를 공부할 때 무조건 배우는 내용이다. 이번 회차에서는 그 내용을 다시 짚어보는데, 배웠던 지식을 단순히 기억해내는 데서 그치지 않고 객체 지향이 왜 좋은지를 이해해볼 수 있는 시간이었다. 객체 지향과 관련된 매우 기본적인 개념, 비유를 들어 객체지향의 장점을 설명해주셨다. 정말 좋은 설명이었지만 굳이 여기에 모든 내용을 정리할 필요는 없을 것 같다. 인상 깊었던 부분만 적어둔다. 인상 깊었던 부분 객체 지향 프로그래밍의 정의 컴퓨터 프로그램을 명령문의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위 즉 객체의 모임으로 파악하고자 하는 것. 객체 지향 프로그래밍을 한 문장으로 잘 설명하는 말인 것 같아서 적어둬야겠다. 위키에서 가져오셨다고 한다. 그리고 객체 지향 프..

1-2. 스프링이란?

스프링에 대한 매우 간단한 설명 회차이다. 내용은 외울 필요 없을 것 같고, 인상 깊었던 내용만 적겠다. 1. EJB를 쓰던 때에는 자바의 객체 지향적인 특성을 제대로 활용하지 못한 채 EJB에 종속되어 개발을 해야 했다. 2. 스프링은 객체 지향적 코딩을 하기에 매우 좋은 도구이다. 3. 스프링이라는 단어의 정의를 내리는 것은 어렵다. 모호한 단어이다. 스프링 프레임워크만을 가리킬 수도 있고, 크고 복잡한 스프링 생태계 전체를 가리킬 수도 있다. 다음 회차에서는 좋은 객체 지향 프로그래밍이 무엇인지를 배운다.

1-1. 이야기 - 자바 진영의 추운 겨울과 스프링의 탄생

스프링이 나타나기까지 어떤 우여곡절이 있었는지 알려주신 회차이다. 간단한 내용정리 옛날 옛적 2000년대 초반의 자바 진영에서는 EJB(Enterprise Java Beans)가 유일무이한 정파 기술의 자리에 있었다고 한다. 이게 아닌 다른 오픈소스 기술을 가져다 쓴다는 것은 매우 불안하고 이상한 일로 여겨졌다고 한다. EJB가 그렇게 형편 없는 기술은 아니었다. 이론적으로 굉장히 좋은 기술이었고 할 수 있는 것도 많았다. 그러나 첫째로 가격이 매우 비쌌고 둘째로 개발자의 입장에서 코딩하기가 너무나 어렵고 불편했다. 강사님께선 이 점을 설명하시며 불지옥에 타고 있는 사람들의 이미지를 보여주셨다... 저 사람들이 바로 그 시절의 개발자들이라면서... 이런 상황을 더이상 참지 못하고 내가 만들어도 더 잘 만..

0. 강의 소개

스프링 입문 강의에 이어, 김영한 강사님의 다른 강의를 듣기 시작했다. 스프링 완전 정복 로드맵을 따라 수강하는 중이다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 첫 회차는 강의에 어떤 내용이 들어있으며 무엇을 목표로 들으면 되는지 설명해주시는 회차였다. 강의의 목적 스프링을 단순히 쓸 줄만 아는 데서 끝나지 않고 객체 지향 설계에 대한 이해를 기반으로 스프링의 의의와 작동 방식을 제대로 아는 것. 그 후에 스프링의 각종 실제 기능들을 배우는 것. 강의를 듣고 나면 이룰 수 있는 것: 스프링 기본 기능 학습 + 스프링의 본질을..

인프런 김영한 스프링 입문 강의 후기

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 이 강의의 마지막 회차인 "다음으로" 회차를 방금 모두 보았다. 한 달간의 대장정이 끝났다. 의도하지 않았는데도 이 강의의 첫 노트정리 게시글이 정확히 오늘로부터 한 달 전(7월 19일)이어서 기분이 좋다. "다음으로" 회차는 그냥 이 강의의 전체 내용을 싹 훑어주고, 앞으로 할 공부의 방향을 알려주는 내용이었기 때문에 "다음으로" 회차 노트정리 대신에 강의 후기나 써보려고 한다. 강의 내용, 추천하는 대상 스프링이 무엇이고 어떻게 굴러가는지 ..

7-2. AOP 적용

AOP가 무엇인지 알아보고, AOP를 적용하는 모습을 코드로 직접 확인하는 회차이다. AOP(Aspect Oriented Programming)란? AOP를 간단하게 설명하자면 다음과 같다. 프로그램의 각 기능을 실행하는 데 시간이 얼마나 걸리는지 측정해야 하는 상황에서, AOP 식으로 개발하지 않으면 아래 그림처럼 해야 한다. 하지만 AOP를 한다면 다음과 같은 상황이 된다. 객체지향적 프로그래밍과 DI를 통하여 각 구성요소를 알맞은 단위로 잘 나누어놓았기 때문에 가능한 일이다. AOP 클래스 속에 코드를 적어주고, 그것을 어디에 적용할지 지정하면 된다. AOP 코드 짜보기 AOP 코드를 위한 패키지를 만들어주고 그 안에 클래스를 만든다. 실행시간 측정용이므로 TimeTraceAop라고 이름을 지었다...

7-1. AOP가 필요한 상황

AOP를 배우기 전에, AOP가 왜 필요한지를 상황극 비슷한 설명을 통해 알려주신 회차이다. 가정 다음과 같은 상황을 가정해보자. 나는 신입 개발자인데, 상사가 갑자기 각 기능이 수행되는 데 걸리는 시간(ms 단위)을 기능별로 싹 다 알고 싶다고 요청한다. 내가 알고 있는 기초적인 실행시간 측정 방법은 시간측정을 하고 싶은 부분의 시작지점에서 현재시간을 ms 단위로 한 번 재고, 부분이 끝나는 지점에서 현재시간을 ms 단위로 한 번 더 재서 그 둘의 차를 구하는 것이다. 지금 우리 팀이 개발 중인 프로그램의 핵심 기능은 총 100가지이다. 나는 밤을 새서 100가지 부분의 시작지점과 끝 지점에 일일이 시간측정 코드를 추가해야 한다... 얼마나 답답한 상황인가? 프로그램의 실제 핵심 기능들의 코드와 시간을..

#1446 : 지름길

풀이방법 사용된 것: 정렬 다익스트라 2022.08.17 고속도로 위에서 0미터 지점부터 D미터 지점까지 1미터씩 전진하며, 현재 자신이 위치한 지점으로부터 시작하는 지름길이 있는지 확인하는 방법을 사용했다. 불필요한 연산을 줄이기 위해 다음과 같이 지름길 정보를 걸러서 저장했다. 주어진 지름길들 중 지름길의 도착지점이 고속도로의 끝지점을 초과하지 않고 이용했을 때 이득이 되는 것들만 List list에 저장해둔다. 그리고 우리는 고속도로의 0미터 지점부터 차근차근 오름차순으로 진행해나갈 것이므로 지름길들을 시작지점을 기준으로 오름차순 정렬(시작지점이 같다면 끝지점을 기준으로 오름차순 정렬)한다. 다음으로는 다익스트라에 필요한 필드들을 준비한다. 1차원 정수 배열 dist를 선언한다. 이 배열은 각 지점..

#1940: 주몽

풀이방법 사용된 것: 정렬 2022.08.12 재료가 N가지 있고 각 재료의 번호는 서로 겹치지 않는다. 재료 두 개를 골라 두 재료의 번호의 합이 M이 되는 경우의 수를 구하는 문제이다. 여러 가지 방법으로 풀 수 있는데 나는 아래와 같이 풀었다. 재료번호들을 오름차순 정렬한 뒤, (내림차순으로 정렬해도 됨) 0번 인덱스에 위치한 수를 좌항으로 잡고, 좌항보다 뒤의 인덱스에 위치한 수들을 우항 후보로 간주한다. 우항 후보들을 하나하나 검사해보며 좌항과의 합이 M이 되는 수가 존재하는지 판별한다. 그러한 수가 존재한다면, 정답의 값을 1 증가시킨 뒤, 현재의 좌항의 다음 수를 새로운 좌항으로 설정한 뒤 위의 과정을 반복한다. 코드 Java(2022.08.12) import java.io.BufferedR..

#1010: 다리 놓기

풀이방법 사용된 것: 조합 2022.05.08 몇 달 전에 푼 문제인데 정리글을 쓰지 않아 적는다. 동쪽에 있는 사이트들 중, 서쪽의 사이트 개수만큼을 고른다. 그럼 이제 다리를 놓을 수 있는 방법은 단 한 가지로 정해진다. 북쪽에서부터 차례대로 딱딱 연결하지 않으면 다리가 서로 겹치기 때문이다. 그러므로 이 문제의 답은 M개 중 순서 상관없이 N개를 뽑는 경우의 수이다. 중/고등학교 때 배운 조합 공식으로 풀면 된다. 코드 Java(2022.05.08) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class M..