Animated Hello Kitty Wink

분류 전체보기

    [spring] 싱글톤 컨테이너

    인프런 스프링 핵심원리 기본편에서 나온 싱글톤 컨테이너에 대해 정리하려고한다. 학교에서 고급 객체지향 프로그래밍을 수강하면서 들어봤던 디자인 패턴 중 싱글톤 패턴에 관한 내용이였다. ? 웹 어플리케이션에서 싱글톤 패턴이 필요한 이유는 🌟 여러 고객이 동시에 요청 🌟 을 하기 때문이다. 만약 여러 고객이 동시에 요청하는 상황에서 요청에 따라 계속 객체를 생성하게되면 메모리 낭비가 심해진다. 그래서 해당 객체가 딱 1개만 생성되고, 그 객체를 공유할 수 있도록 설계해야한다. 하지만 싱글톤 패턴을 사용하게 되면 패턴을 구현하는 코드 자체가 많이들어가게 되고, 의존관계상 클라이언트가 구체 클래스에 의존(DIP 위반) 하게되는 등의 문제가 있다. 스프링 컨테이너는 이러한 싱글톤 패턴의 문제점을 해결하면서, 객체가..

    [Java] Sort 사용

    코테 문제를 풀다보니 배열을 정렬해야하는 경우가 많아 정리 ! Arrays.sort(배열); ✔️ 배열을 오름차순으로 정렬 ✔️ 문자열의 경우 아스키코드순으로 오름차순 정렬, 한글도 가나다 순 🍓 int, long, short, double 등 기본타입에 대한 정렬지원, Reference 타입의 배열의 정렬도 지원 🍓 숫자 > 대문자 > 소문자 > 한글 순 ˜ 내림차순으로 정렬하고싶은 경우 Arrays.sort(배열, Collections.reversOrder()); ✔️ 두번째 인자로 Comparator의 구현체를 주면 원하는 방식대로 정렬 가능 (reversOrder() 말고도) Compareraor ✔️ 정렬을 하기 위한 여러가지 명세를 제공하는 인터페이스 ✔️ Reference 타입의 배열에서 정..

    [spring] loc, DI, 컨테이너

    스프링 핵심 원리 - 기본편을 수강하면서 나온 개념이다. Appconfig를 만들어서 연결해주기 전에는 OrderServiceImpl 같은 클라이언트 코드에 영향을 주는 코드를 짰었다. public class OrderServiceImpl implements OrderService { private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final MemberRepository memberRepository = new MemoryMemberRepository(); ... } 다음과 같이 코드를 짜게되면 클라이언트 코드(OrderServiceImpl)에서 DiscountPolicy와 같은 인터페이스 코드 뿐만 아니라 구..

    [Java] length / length() / size() 차이

    아직 자바 언어에 익숙치 않아서인지 코테 문제를 풀다가 length .. size 혼동해서 쓰는 경우가 많아서 정리해두려고 한다 ! 1. length ✔️ 배열의 길이를 알고자 할 때 ✔️ int[], String[] .. 2. length() ✔️ 문자열의 길이를 알고자 할 때 ✔️ String, StringBuilder .. 3. size() ✔️ 컬렉션프레임워크 타입의 길이를 알고자 할 때 ✔️ ArrayList, Set ..

    [spring] Test 코드 - assertThat

    스프링 핵심 원리 - 기본편을 들으면서 나온 assertThat ! Test 코드를 작성할 때, system.out.print()으로 출력하지 않고 소스코드의 특정 모듈이 정확히 동작하는지 검증하기 위해 사용한다. AssertJ란 자바 Juit 테스트코드에 사용되어, 테스트코드의 가독성과 편의성을 높여주는 라이브러리이다. AssertJ에서 모든 테스트코드는 assertThat() 으로 시작한다. 강의에서는 다음과 같이 사용하였다. import org.assertj.core.api.Assertions; Assertions.assertThat(테스트 타겟).isEqualTo(기대되는 값); 좀 더 가독성(?)을 높이려면 import static org.assertj.core.api.Assertions.*; ..

    [PGS-Java] 기능개발(lv.2) - Math.ceil(), ArrayList ➡️ Array

    프로그래머스 "기능개발(lv.2)" 문제를 풀었는데, 너무 코드를 길게 효율적으로 짜지 못한 것 같아 다른사람의 풀이를 보고 개선해보고자 한다 ! 일단 내 풀이는 다음과 같다. import java.util.*; class Solution { public int[] solution(int[] progresses, int[] speeds) { // 작업이 끝나기까지 남은 일 수 Queue q = new LinkedList(); for (int i = 0; i < speeds.length; i++) { int lastProgresses = 100-progresses[i]; if (lastProgresses % speeds[i] == 0) { q.add(lastProgresses/speeds[i]); } el..

    [Java] Stack, toCharArray 사용

    백준 9093을 푸는 과정에서 Java에서 Stack을 사용하는 방법에 대해 익히고, 앞선 BufferedReader와 BufferedWriter을 사용해보았다. 또한, toCharArray()라는 메소드를 사용해 보았다. ✔️ String.toCharArray() 문자열을 char형 배열로 바꿔준다 문제에서는 아래와 같이 BufferedReader로 받아준 문자열을 char형 배열로 바꿔주었다. String str = br.readLine() + "\n"; char[] arr = str.toCharArray(); ✔️ Stack 스택은 한쪽 끝에서만 자료를 넣고 뺄 수 있는 자료구조이다(LIFO) 직접 구현할 수 있지만 자바 Stack 라이브러리를 사용하는 방법도 있다. import java.util...

    [Java] 코딩테스트 입출력

    보통 java에서 입출력을 위해 Scanner과 System.out 을 사용했는데, 속도 측면에서 BufferedReader와 StringBuilder나 BufferedWriter를 사용하는 것이 좋다고 해서 방법을 익혀두려고 한다 ! (입력된 데이터가 바로 전달되지 않고 버퍼를 거져 전달되므로 데이터 처리 효율성을 높임) ✔️ BufferedReader는 Enter만 경계로 인식, 받은 데이터 String으로 고정 ➡️ 입력받은 데이터 가공해야함 import java.io.*; import java.util.*; public static void main(String args[]) throws IOException { } // 예외처리 필요 BufferedReader br = new BufferedRe..

    [django] 초기 project 생성 및 실행

    1. 가상환경 만들기 python3 -m venv venv 2. 가상환경 실행 source venv/bin/activate +) dectivate : 가상환경 끄기 3. pip설치 pip install django ✔️ django rest framework 사용할거라믄 pip install djangorestframework ✔️ pip freeze > requirements.txt 통해서 설치한거 requirements.txt 폴더로 들감 이후 협업 하는 사람 pip install -r requirements.txt 이렇게 설치하면 같은 버전으로 설치 가능 4. 장고 프로젝트 생성 django-admin startproject config . 5. 서버 가동 python manage.py runser..