서론IoC 컨테이너는 설정에 따라 @Component, @Service 등의 어노테이션이 붙은 클래스를 컴포넌트 스캔을 통해 탐색하거나, 개발자가 명시적으로 등록한 빈 정보를 기반으로 빈을 생성하고 관리한다.탐색한 빈을 등록하고, 초기화하며, 요청에 따라 주입하고, 소멸까지 전 생명주기를 관리한다.이러한 일련의 과정을 통해 Spring IoC 컨테이너는 빈의 생명주기를 관리하게 되며, 이 생명주기는 빈의 스코프(scope)에 따라 달라질 수 있다. 그래서 이 빈의 스코프에 대해 알아보고자 한다.Bean Scope 종류스코프 (Scope) : 빈이 존재할 수 있는 범위싱글톤 (Singleton)기본적으로 빈이 생성될때의 스코프Spring 컨테이너당 빈(Bean) 인스턴스를 하나만 생성한다 ➡️ 하나만 생성..
전체 글
안녕하세요 백엔드 개발자 벨라입니다[ 이번 챕터에서 중점으로 가져가야할 키워드 ]- 캡슐화, 다형성[ 이번 장에서 내 것으로 만들어야 할 질문 ] - 캡슐화란 무엇이고 왜 중요한가?- 다형성이란 무엇이며, 객체지향에서 어떻게 활용되는가?- 언제 추상클래스 또는 인터페이스를 사용하는가?- 메시지와 메서드의 차이는 무엇인가?- 객체가 협력한다는 것은 어떤 의미인가? 영화 예매 시스템요구사항할인 조건 : 가격의 할인 여부 결정 - 할인 조건 내 중복 가능순서 요건 ex) 매일 10번째 로 상영되는 영화 예매시 할인기간 조건 - 요일, 시작 시간, 종료 시간 ex) 매주 월요일 오전 10시 ~ 오전 11시할인 정책 - 하나의 할인 정책만 사용 가능금액 할인 정책예매 요금에서 일정 금액을 할인해주는 방식비율 할인 정책정가에서 일정 비율을 할인해주..
티켓 판매 애플리케이션 구현이벤트 당첨자에게 초대장(Invitation) 발송초대장을 받은 관객(Audience)은 티켓(Ticket)을 받고 관람 가능초대장이 없는 관객은 돈(amount)을 지불하고 관람 가능(구현시 내가 놓친 부분) 관객이 소지품(티켓, 돈, 초대장)을 보관할 용도인 가방(Bag) 필요✅ Bag 클래스에서 상태 조회 메서드(hasInvitation(), hasTicket())를 구현하면 더 객체지향적인 설계가 될 수 있음아래는 개선이 필요한 Theater 클래스의 코드 예시if (audience.getBag().getInvitation() == null){ ...} else {}if (audience.getBag().hasInvitation()) { ..
📌 문제 상황 @Override @Transactional public MemberWithdrawHistoryDto cancel(Member loginMember, Long id) { MemberWithdrawHistory memberWithdrawHistory = memberWithdrawHistoryRepository.findById(id).orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_MEMBER_WITHDRAW_HISTORY)); if(!memberWithdrawHistory.getMember().equals(loginMember)){ // false (?) throw new CustomException(ErrorCode.INVALID_AU..
“최소한의 자원으로 최대한의 효율을 내자 !” 배경 자바 기반의 표준 배치 기술의 부재 배치 처리에서 요구하는 재사용 가능한 자바 기반 배치 아키텍처 표준의 필요성이 대두 표준 : 표준 IO, JDBC, … JSR 일괄 처리를 위한 자바 표준이 없으니, Spring Batch 가 만들어지게됨 이상적인 배치를 위한 조건 배치 프로세스를 주기적으로 커밋 만약에, 대용량 데이터를 한번에 처리해야한다면??? 너무 큰 리소스가 필요하게된다. 주기적으로 커밋하기 위한 전략이 필요함 동시 다발적인 여러개의 Job의 배치 처리, 대용량 병렬 처리 Job끼리 독립적이고, 영향이 없어야하고, 다량의 Job, 용량이 큰 데이터는 병렬적(멀티 스레드)로 처리해야한다. 만약에 실패/중단이 된다면, 수동/스케쥴러에 의한 재시작이..
일괄 처리 (Batch processing) 개별적으로 어떤 요청이 있을 때마다 실시간으로 통신하는 것이 아닌, 한꺼번에 일괄적으로 대량의 건을 처리 하는 것 배치 처리가 쓰이는 곳 주간, 월간 청구 / 급여 / 정산 특정한 조건의 사람들에게 무언갈 지급하는, 안내하는 행위 대량의 데이터를 주기적으로 받아와서, 가공해서 저장하는 등의 행위 배치 처리와 배치 프로그램을 사용 하는 이유 사람이 대용량의 데이터를 반복적인 태스킹을 한다면? 정말 비효율적 스케쥴러를 이용해서 만들어볼 수 있지 않을까? 만약에 중간에 중지하거나 실패하면…. 어디서부터 다시 해야하는지 찾아봐야됨 아니면.. 처음부터..? 😱 그럼 모든 프로젝트에서 배치처리를 구현하기 위해, 똑같은 지원 사양들(중지됐을 때 처리 방법, 어떻게 배치 처..
백트래킹(BackTracking)이란? 가능한 모든 경우의 수를 찾는데, 특정 조건을 만족한 경우한 찾는 방법 예를 들어, nPr 같은 경우 효율성이 안나오는데 특정 조건을 만족하게(조건문을 걸어서 탐색 중지하고 이전으로 되돌아가게끔)하면 사용 가능하다. 백트레킹의 유명한 예제로 N-Queen문제가 있다. 이 문제는 SW export academy 2806번에 문제 설명이 잘 나와있으니 문제 설명은 다음 링크에서 확인하면 될 것같다. https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV7GKs06AU0DFAXB&categoryId=AV7GKs06AU0DFAXB&categoryType=CODE SW Expert Aca..
Scanner는 입력 받을 때 정수 값, 소수 값, 문자 데이터도 구분지어 읽어들일 수 있다는 장점이 있다. 하지만 키보드에서 입력을 하면 바로 값이 전달되므로 비효율적이다. (실제로 시간도 굉장히 많이 소모한다.) 예를 들어 멜론을 운반하는데 한 번에 하나씩 전달하는 것과 박스에 담아서 옮기는 것의 효율성은 비교가 안된다. 우리가 입력하는 값도 멜론 박스에 담아서 보내면 당연히 더 효율적이다. 그래서 BufferedReader를 사용한다. 다음 코드는 BufferedReader로 파일에 있는 값을 받아오는 코드다 FileInputStream fis = new FileInputStream("input.txt"); // file에서 8bit씩 읽어옴 -> 16bit로 바꿔줘야함 InputStreamRead..
String 선언 방법 String s1 = new String("IT's your life"); String s2 = "Welcome ";// String만 허용됨 String s3 = s2 + s1; // Welcome IT's your life String은 덧셈을 허용하지만, String내부적으론 상수로 취급한다. 따라서 덧셈을 하게 되면 2개의 객체가 생성되고, 2개의 객체가 제거되는 작업이 필요로하게 된다. ⇒ String 연산은 편집이 많지 않은 문자열일 때 사용하자 💡 ⇒ 편집이 많아질때는? StringBuilder를 사용하자 String str1 = "Hello"; String str2 = str1 + 10; System.out.println(str2); // Hello10 System...
https://school.programmers.co.kr/learn/courses/30/lessons/12902 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 가로 길이가 2이고 세로의 길이가 1인 직사각형 모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 3이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다 타일을 가로로 배치 하는 경우 타일을 세로로 배치 하는 경우 예를들어서 n이 8인 직사각형은 다음과 같이 채울 수 있습니다. 직사각형의 가로의 길이 n이 매개변수로 주..