본문 바로가기

전체 글502

7. Singleton Container 0. 개요 - Spring Container의 다른 이름이 Singleton Container이다. - Spring Container가 Bean을 Singleton 방식으로 관리하기 때문에 붙여진 이름이다. - 이번 포스팅에서는 Singleton Container에 대해서 알아보도록 하자. 1. Spring이 Singleton을 사용하는 이유 - Spring 프레임 워크는 기업용 웹 서비스를 지원하기 위해 등장한 기술이다. - 기업용 웹 서비스는 다수의 사용자가 동시적으로 서버에게 요청을 보낸다. - 이러한 다수의 동시 요청을 오류 없이 처리하기 위해 Singleton 방식을 사용한다. a) 다수의 요청을 처리하는 방법 - 고객의 요청마다 객체를 새롭게 생성한다고 가정해보자. - 서비스 트래픽이 초당 1.. 2022. 2. 2.
6. Spring Container의 다형성 0. 개요 - ApplicationContext(= Spring Contianer)는 다양한 형태로 구현이 가능하다. - 이는 ApplicationContext(= Spring Contianer)가 인터페이스이기 때문이다. - 이번 포스팅에서는 ApplicationContext의 다형성에 대해서 알아보자. 1. BeanFactory - BeanFactory는 ApplicationContext의 상위 개념이다. - ApplicationContext는 인터페이스고, BeanFactory라는 인터페이스를 상속받는다. - 그렇다면 BeanFactory는 무엇일까? a) Spring Container의 최상위 개념 - BeanFactory는 Spring Container의 최상위 개념이다. - BeanFacotr.. 2022. 2. 1.
5. Spring Container 0. 복습 - 이전 포스팅에서 Spring을 사용해야 하는 이유에 대해서 알아보았다. - java만으로 객체지향 프로그래밍의 원칙(SOLID)을 온전히 구현할 수 없기에 AppConfig 설정 파일을 사용하여 구현체 간의 의존관계를 설정하고, 이 의존관계를 외부에서 주입(DI)하는 방식을 사용했다. - 그로 인해 프로그램의 전체적인 흐름이 프로그램 내부에 의해 결정되는 것이 아닌, 외부의 설정 파일(AppConfig)에 의해 결정되는 IoC의 특징에 대해 알 수 있었다. - 그렇다면 Spring에서 SOLID, DI, IoC, AppConfig 등의 개념을 어떻게 사용하는지 알아보자. 1. Spring Container - AppConfig의 역할(구현체의 생성, 관리 그리고 의존관계 형성)을 하는 대상.. 2022. 1. 31.
Java의 기본 자료형(Primitive) 1. 정수형(short, int, long) a) Java가 숫자 계산을 하는 방법 - Java는 숫자 연산을 int형으로 변환하여 계산한다. 즉, int형 연산을 기본으로 한다. - short 자료형의 변수 2개를 더한다고 하더라도 연산 시 int로 변환하여 계산하고, int형으로 결과를 반환한다. public class MyClass { public static void main(String args[]) { short num1 = 10; short num2 = 10; short num3 = num1 + num2; System.out.print(num3); } } - 이처럼 short 자료형이지만, Java가 연산을 할 때에는 int로 계산이 되기 때문에 위와 같은 에러가 발생한다. - 즉, 작은 자.. 2022. 1. 28.
변수와 리터럴에 대하여 1. 변수(Variable) a) 개념 정의 - 변수는 데이터를 저장하기 위해 할당된 메모리 공간에 붙여지는 이름이다. - 다음 예시를 보자. int num = 1; - 변수를 선언하여 1이라는 숫자는 메모리의 어떤 공간에 저장되었다. - 이 메모리 공간은 16진 수로 된 일련번호를 갖는다. ex) 1b3A1211 - 저장된 데이터(1)를 찾기 위해서 매번 16진수의 메모리 주소 값을 기억하는 것은 무리가 있으며, 가독성이 떨어져 비효율적이다. - 그러므로 이 메모리 공간에 대한 주소값을 대신한 이름을 붙이는데, 이것이 변수다. b) 변수 정의 시 주의사항 - 변수의 이름은 숫자로 시작할 수 없다. - 변수의 이름에는 $와 _(언더바) 외 다른 특수문자는 사용할 수 없다. - 이미 Java에 정의되어 있.. 2022. 1. 27.
4. Spring을 사용하는 이유 0. 개요 - 이전 포스팅에서 좋은 객체지향 프로그래밍을 위한 SOLID 원칙을 배웠다. - 이제 SOLID만 따른다면, Java를 사용해 온전한 객체지향 프로그래밍을 구현할 수 있을까? 1. Java는 SOLID 원칙을 지킬 수 없다. - Java만을 이용해서 SOLID 원칙을 구현하는 것에는 문제가 있다. - 무엇이 문제인지 알아보자. a) OCP와 DIP원칙의 위배 - Java만을 이용하여 객체지향 프로그래밍을 만들다 보면 OCP와 DIP원칙을 위반하게 된다. - 간단한 예제를 살펴보자. public class ServiceImpl implements Service { private final Repository repository = new MemoryRepository(); } - 위의 예시에서.. 2022. 1. 27.
3. SOLID 원칙 1. 좋은 객체지향 프로그램을 만드는 방법 - 이전 포스팅에서 좋은 객체지향이란 다형성을 잘 유지하며 개발하는 것이라고 했다. - 단순하게 역할과 구현을 분리하면 되는것 아닌가? 생각할 수 있다. - 그러나 프로그램의 사이즈가 커질수록, 코드가 서로 얽히면서 객체지향을 유지하기 어려워진다. - 이처럼, 큰 규모의 프로그램에서도 좋은 객체지향 프로그래밍을 할 수 있도록 제시된 규칙이 있다. 2. SOLID 원칙 a) 개요 - 클린 코드의 저자인 Robert Martin이 정리한 좋은 객체지향 프로그래밍의 5가지 원칙 - SOLID는 다섯가지 원칙의 앞글자를 따서 만들어진 이름이다.(SRP, OCP, LSP, ISP, DIP) b) SRP(Single Responsibility Principle, 단일 책임.. 2022. 1. 26.
2. 다형성(Polymorphism)과 객체지향 프로그래밍(OOP) 0. 결론 - Spring과 객체지향 프로그래밍의 핵심은 다형성에 있다. - 다형성을 객체지향 프로그래밍의 특성 중 하나라고 말하지만, 다형성으로 인해 객체지향 프로그래밍의 개념이 완성된다. - 그렇다면 다형성이 무엇인지, 왜 객체지향의 핵심인지 알아보자. 1. 객체지향 프로그래밍(OOP)이란? - 객체지향 프로그래밍이란, → 독립적인 단위(객체)가 협력하여 데이터를 처리하는 프로그램 구조를 갖는 것 → 독립적인 단위(객체) 간의 관계가 유연하여 부품을 교체하듯, 프로그램의 구조변경이 쉬운 것 - 즉, 자동차를 만드는 것처럼 프로그램(App)을 만드는 것이다. - 자동차는 수많은 부품의 조합으로 이루어진 결과물이다. - 이처럼 코드를 역할에 따라 분리하고, 하나의 부품으로써 조합하여 App이라는 결과물로.. 2022. 1. 24.
1. Maven과 Gradle이란? 1. Spring 프로젝트 만들기 - 이전에는 하나부터 열까지 Spring 환경을 직접 설정했다. - 하지만, 환경설정이 자동화되어 있는 Spring Boot를 사용하면서 프로젝트 또한 자동화를 거쳐 생성한다. - 그 방법이 아래의 사이트를 사용하여 Spring 프로젝트를 만드는 것이다. https://start.spring.io/ a) Maven & Gradle - 프로젝트 생성을 시작하면, 맨 처음에 Maven과 Gradle을 선택하게 된다. 이들은 무엇일까? - Maven과 Gradle 모두 자바 프로젝트에서 사용되는 빌드 자동화 및 관리 시스템이다. a-1) Maven의 특징 - Maven은 XML을 기반으로 한 빌드 자동화 시스템이다. - Maven은 사용하는 라이브러리와 해당 라이브러리와 연관.. 2022. 1. 23.
2021년 회고록 - 은은하게 달리기 1) 21년의 시작 19년 6월, 개발자의 길을 걷기 시작한 이래로 어느새 2022년이 되었다. 국비를 수료하니 20년 5월이 되었고, 인고의 구직활동 끝에 개발자 인턴쉽을 시작했을 때가 20년 12월이었다. 그렇게 21년을 맞이했다. 2) 21년을 돌아보며 2021년 동안 나는 다음과 같은 시간을 보냈다. - 3개월 간의 개발자 인턴쉽 종료(20년 12월 ~ 21년 2월) - 4개월 간의 스타트업 도전기(21년 4월 ~ 21년 7월) - 7개월 간의 카페 알바(21년 5월 ~21년 11월) - IT 대기업 도전기(21년 8월 ~ ) 위의 기록을 적고나서 1년이라는 시간 동안 "나 꽤나 부지런히 살았구나"라며 기뻐했다. 다행이다. 시간을 헛되이 보내지 않았다는 것이. 뿌듯했다. 그 누구도 아닌 내가 그 .. 2022. 1. 1.
함수형 프로그래밍에 대하여 0. 개요 - 언어와 상관없이, 알고리즘 공부를 하다 보면 내가 10줄로 짠 코드를 누군가는 3줄로 짜는 것을 보며 현타가 올 때가 많다. - 이 7줄의 차이는 언어에 대한 이해도의 차이에서 온다고 생각한다. - 최근 파이썬과 자바스크립트 같은 함수형 프로그래밍 언어가 주목을 받으면서, 파이썬을 파이썬답게 쓰자는 말이 많이 들린다. - 어떻게 해야 사용하는 언어답게, 그 언어에 최적화된 기술들을 이용하여 코드를 짤 수 있을까? - 그 시작은 언어에 대한 특성을 이해하는 것에서 시작된다고 생각하여 이번 포스팅을 준비했다. 1. 함수형 프로그래밍이란? - 함수형 프로그래밍은 절차 지향적 언어보다 시대적으로 앞서 등장한 언어의 형태다. - 함수형 언어는 수학적 사고방식을 필요로 하기에, 사람의 사고방식에 가까.. 2021. 12. 29.
파이썬 - packing/unpacking 1. Packing - packing은 여러개의 객체를 하나의 객체로 합쳐주는 기능이다. - packing에는 2가지가 존재한다. a) 위치인자(*) packing - print('a', 'b', 'c') - print 함수는 매개변수의 갯수에 대한 제약이 없다. 이것이 가능한 이유가 packing이다. - 즉, 함수의 인자(=매개변수)의 갯수를 유연하게 지정할 때 사용한다. - 위치인자(*)를 매개변수 앞에 붙이면 packing을 사용한다. - 위치인자를 사용하면 다수의 값들을 tuple로 관리한다. 예시 - 위치인자) def test_packing(*args): print(type(args)) print(args) test_packing(1,2,3,4,5) b) 키워드인자(**) packing - 키.. 2021. 12. 26.