전체 글 182

[Spring] ApplicationContext, 스프링 컨테이너, 스프링 빈(Bean)

프로젝트를 제작하면서, 기존에 인X런에서 배웠던 내용들을 다시 리마인드하는 작업을 하고 있다. 이거 굉장히 좋은 학습 방법인 것 같다. 아주 착착 감긴다. 어떤 느낌이냐면, 흩어진 지식들을 연결하는 느낌이다. 하드 코딩으로 필요한 기능을 추추추추추추추가 하며 무슨 내용인지도 모르고 '그냥 기능만 잘 동작하면 되지' 라는 마인드로 개발을 진행했었다. 이 어노테이션(@)이 왜 쓰이고, 무엇 때문에 쓰이고 어느 부분에선 왜 이런 어노테이션이 쓰이는지 그 이유를 알 수 있는 공부 방법이라고 생각한다. 그래서 뿔뿔이 흩어져있는 지식들을 연결하기 위한 정리들을 시작하는 중이다. 그 첫 번째는 ApplicationContext이다. 스프링을 한 번이라도 접해봤다면 ApplicatioContext를 들어는 봤을 것이다..

Programming/Spring 2022.02.06

[TFAE] 맥북 자바 버전 확인 및 자바 버전 변경하는 법

맥북을 사용하다 보면, 프로젝트 시 조건에 따라 버전을 달리 설정해야 할 때가 있다. 그럴 때 맨날 구글링 하는 것도 좋지만, 내 것을 보는 것이 더 도움이 될 것 같아서 작성한다. * 설치된 자바 경로 확인 /Library/Java/JavaVirtualMachines/ * 현재 시스템 상에서 사용중인 자바 버전 확인 java -version * 자바 버전 변경을 하고 싶다? 변경하고자 하는 자바의 경로를 복사한다. Home에서 소스 파일을 연다. bash_profile 혹은 zshrc 파일 (bash_profile 과 zshrc의 차이점) $vi ~/.zshrc​ 터미널 내 zshrc파일에서 JAVA_HOME을 찾아 JAVA_HOME의 값을 1번에서 복사한 경로로 붙여넣는다. 문서 수정하려면 (I)를 ..

[백준] 2675번 : 문자열 반복 - JAVA [자바]

2675번: 문자열 반복 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다 www.acmicpc.net 메서드를 사용해서 구현해보겠다고. 까분 흔적 package Daily; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class P2675 { public static void main(String[] args) throws IOException { Buffere..

[디자인패턴] Prototype Pattern - 프로토타입 패턴

프로토타입 패턴이란? 프로토타입은 보통 프로젝트에서 시제품, 시안 정도로 해석되는 공대에서 많이 쓰는 용어다. 프로그래밍에선 디테일한 의미가 조금 다르긴 하다만, 그 맥락과 뜻은 같이 하는 것 같다. 먼저, 공대에서 사용하는 프로토타입에 대해 간략하게 알아보자. (내가 이해한 부분임) 많은 전공 과목을 수강하며 프로토타입이란 단어를 한 학기도 들어보지 않았던 적이 없었다. 당시 이해했던 프로토타입은 제품의 기능을 빠르게 테스트하기 위해 만드는 시제품이라는 생각이었다. 그래서 구상하고자 하는 완성된 제품의 기능을 테스트 할 때 항상 프로토타입을 만들어서 테스트를 하곤 했다. 본격적인 프로그래밍, 디자인패턴에서의 프로토타입에 대해 살펴보자. 먼저, 가장 중요한 킹키백과의 내용은 다음과 같다. 프로토타입 패턴..

Note 2021.12.20

[디자인패턴] Singleton Pattern - 싱글톤 패턴

싱글톤 패턴에 대해 ㅇrㄹr보ㅈr. 싱글톤 패턴도 예전에 데코레이터 패턴이나 프록시 패턴처럼 이름에서부터 느낌이 오는 경우의 디자인 패턴이다. 뭔가 싱글톤하면 '하나'인 느낌이다. 싱글톤 패턴을 공부하면서 계속 싱글톤, 싱글톤을 되뇌이는데 자꾸 아래의 짤이 생각이난다. 혼자야? 어, 아직 싱글이야 싱글톤 패턴이 주는 어감에서 알 수 있듯이 한 개에 뭔가 집착을 하는 것처럼 보인다. 싱글톤 패턴은 객체를 딱 한 번만 생성해서 사용하는 패턴이다. 그렇다면 왜? 한 번만 생성해서 사용하는지 그 이유가 궁금하다. 여러 블로그를 뒤적거렸고, 사용하는 이유에 대해 공통적으로 포스팅한 것을 나름 정리를 해보았다. * 싱글톤 패턴 사용 이유 1. 최초 한 번의 new 연산자를 통해, 고정된 메모리 영역을 사용한다. 따..

Note 2021.12.19

[디자인패턴] Decorator Pattern - 데코레이터 패턴

Decorator Pattern은 단어에서 주는 느낌 그대로 받아들이면 될 듯하다. 데코레이터는 말 그대로 원래의 기본 무언가에서 추가로 꾸며주는 역할을 하는 것을 칭한다. 데코레이터 패턴도 마찬가지다. 기본 기능이 있고, 추가 기능을 덧붙일 때 사용하게 되는 패턴이다. 이 패턴을 사용하게 되면 좋은 이유는 서브 클래스 수를 늘리지 않아도 된다. 이 말이 무슨 헛소리인가. 이상한 소리처럼 들릴 수 있겠지만 차근차근 예제를 통해 살펴보도록 하자. 개인적으로 서브웨이를 참 좋아한다. 그리고 야채를 많이 넣는 것을 굉장히 좋아한다. 또 어느 누군가는 육류를 많이 넣는 것을 좋아하고 야채를 싫어하는 사람도 있다. 또 야채와 고기의 비율을 중요시 여기는 사람도 있다. 그래서 야채파, 고기파, 야채 + 고기파 이렇..

Note 2021.12.18

[디자인패턴] Composite Pattern - 복합체 패턴

이름부터 아리송한 복합체 패턴(Composite Pattern)은 일괄적인 관리를 위해 고안된 패턴이다. 복합 개체와 단일 개체를 같은 방법으로 사용하고자 할 때 사용하는 패턴이다. 이게 무슨 말일까 ? 역시 추상화를 해보면 조금 이해하기 쉬울 듯 하다. 도형 삼각형, 사각형, 원을 그리고 삼각형과 사각형을 그룹화 지었다고 가정하자. 그렇다면 (삼각형, 사각형) / 원 이런식의 두 그룹으로 나뉘게 된다. 이제 이 도형들에게 색을 입힐 것인데 색을 입히는 행위는 그룹이 되어 있건 안되어 있건 하나의 버튼으로 동작하게 된다. 이처럼 하나의 객체처럼 동작하는 다수의 객체가 있는 경우에 적용이 가능하다. 이 말을 위의 예제에 빗대어 설명하자면 색을 칠하는 동작(하나의 객체처럼 동작)하는 삼각형, 사각형, 원(다..

Note 2021.12.17

[디자인패턴] Factory Pattern - 팩토리 패턴

팩토리 패턴은 말 그대로 공장이다. 공장은 무엇을 하는가를 생각해보면 조금 이해가 쉽다. 공장은 무언가를 생성하는 곳이고, 그것을 대량으로 찍어내기도 한다. 핵심 키워드를 조금 더 좁혀본다면, 생성과 찍어내기이다. 그래서 학문적으로 팩토리 패턴은 어떤 상황에서 조건에 따라 객체를 다르게 생성해야 할 때, 분기에 따른 객체의 생성을 직접하지 않고, 팩토리 라는 클래스에 위임해서 이를 처리하게 한다. 라고 적혀있다. 역시, 학문적인 접근은 굉장히 투박한 것 같다. 역시 추상화를 적용해보자. 색칠 공부를 하려고 한다. 색칠 공부를 하기 위해선 스케치만 되어있는 밑 그림이 필요하다. 이러한 밑 그림을 개인이 그리고 색칠까지 하려면 굉장히 많은 프로세스를 본인이 부담하게 된다. 따라서, 밑 그림을 다양하게 제공하..

Note 2021.12.16

[디자인패턴] Proxy Pattern - 프록시 패턴

프록시 패턴을 알기 위해선, 먼저 프록시(Proxy)가 무엇을 의미하는 것인지 알아야 한다. Proxy는 대리, 대신이라는 뜻을 갖고 있다. 그 말인 즉슨, 프로그래밍에서 프록시는 무엇인가를 대신, 대리로 처리해준다는 것이다. 이를 현실 추상화하여 빗대어보면 비서의 역할과 많이 닮아있다. 그래서 학문적으로 프록시 패턴은 어떤 다른 객체로 접근하는 것을 통제하기 위해 그 객체의 대리자 역할을 수행하게 하는 객체라고 정의하고 있다. 프록시는 자신의 의견 반영을 할 수 없고, 단지 제어의 흐름을 변경하거나, 다른 로직 수행 시 사용한다. 이를 다시 추상화하여 비서의 역할로 빗대어 보면 비서는 회장에게 의견을 반영해서 수정 작업을 할 수 없다. 오로지 전달만 할 뿐이다. 회장이 각 부서 팀장에게 전달을 하고자 ..

Note 2021.12.15

[디자인패턴] Template Method Pattern - 템플릿 메서드 패턴

Template Method Pattern은 일 처리의 단계를 미리 정해놓고 자세한 내용은 나중에 처리하도록 강제하고 싶을 때를 위한 패턴이다. 이를 위해 자바에서 제공하는 추상클래스를 살펴보자. * Abstract Class vs Interface의 비교 public interface Interface { public String showName(); } public abstract class AbstractClass { public String showName(); // body가 없으므로 Error! } * 자바의 인터페이스는 원하는 메서드를 미리 선언하고, 선언된 메서드를 상속받은 객체(구현체)가 구현하도록 강제하는 역할을 한다. * 자바의 추상클래스는 인터페이스와 같은 의도이지만, 컴파일러는 "..

Note 2021.12.08