분류 전체보기
[Spring Boot] Spring Dependency Injection 동작 원리와 Ioc Container를 알아보자
학습 목차 @Component 애노테이션을 사용하면 왜 싱글톤 인스턴스가 생성이 되지? reflection 기능을 이해해보자 애노테이션을 사용해보자 Dependency Injection 을 만들어보자 Spring IOC Container 가 무엇인지? @Component 애노테이션을 사용하면 왜 싱글톤 인스턴스가 생성이 되지? BookRepository 의 의존성을 가진 BookService 가 있습니다 public class BookRepository { } public class BookService { public BookRepository bookRepository; } 테스트 코드를 사용하여 BookService의 인스턴스를 생성하지 않고 null 인지 테스트를 해보겠습니다. BookServic..
[Book] ITEM 4) private 생성자로 noninstantiability를 강제할 것
모든 클래스들이 인스턴스화가 필요한 것이 아닙니다. static 메서드와 static 필드들을 담은 클래스들을 인스턴스화를 시키지 않아도 기능들을 사용 할 수 있는데 굳이 인스턴스화를 시킬 필요는 없다고 봅니다. 역직렬화 기능을 담은 클래스가 있다고 가정해봅시다. public class ObjectDeSerialization{ private static ByteArrayInputStream byteArrayInputStream; private static ObjectInputStream objectInputStream; public static byte[]makeByteDecodeArray(String encodeObject) { return Base64.getDecoder().decode(encodeO..
[Book] ITEM 3) private 생성자 또는 enum 타입을 사용해서 싱글톤으로 만들것
오직 하나의 인스턴스만 만드는 클래스를 싱글톤이라 말합니다. 싱글톤 패턴을 생성하는 2가지 방법이 있는데 두 방법 모두 생성자를 private 으로 만들고 public static 멤버를 사용해서 유일한 인스턴스를 제공한다. 🟠 public static final 필드 첫번째 방법은 static final 필드로 인스턴스를 생성합니다. static 필드는 메모리에 올라갈 때 인스턴스를 단 한번만 생성해주는 장점이 있고 인스턴스가 여러번 생성이 되도 인스턴스는 동일한 객체입니다. public class Singleton { public static final Singleton singleton = new Singleton(); private Singleton() {} } 테스트 코드를 이용하여 동일한 객체..
[Book] ITEM 2) 생성자의 매개변수가 많다면 빌더를 고려하라
static 팩토리 메서드와 public 생성자 모두 매개변수가 많이 필요로 한 경우에 불편한점이 있고, 객체를 생성할 때 파라미터 값을 주는데 이러한 파라미터의 값들이 무슨의미인지 잘 모르는 경우가 많고 복잡한 문제점이 생긴다. // 필드값이 어떤 의미지?? Pet pet = new Pet(1L, "스폰지밥", "1월", "고둥길", 1D); 🔴 try 1 : 생성자 생성하고 싶은 필드들을 생성자를 사용하여 인스턴스를 만들 수 있다. 나는 이름과 주소만 받아서 생성할 꺼야! // 필수 필드의 파라미터 public Pet(String name, String address) { this.name = name; this.address = address; } 하지만 이러한 설정은 name 과 adress 만 ..
[Book] ITEM 1) 생성자 대신 정적 (static) 팩토리 메서드를 고려해 볼 것
학습 목표 장점과 단점을 이해 하는 것이 목표입니다. 장점 🔴 이름을 가질 수 있다. 생성자에서 제공하는 파라미터가 주입을 받을 시점에 무슨 의미인 데이터인지 클라이언트에서는 알기가 어려운 부분이 있는데 이때 우리는 정적 팩토리 메서드를 고려해 볼 만합니다. person 이라는 클래스에 name 과 nickName 을 정의 하고 생성자를 만듭니다. 객체를 생성하여 파라미터를 받아봅시다. 스폰지밥과 스폰지가 파라미터로 받아오는데 어떤 의미가 있는지 명확하게 알 수 가 없다. 이때 사용하는 것이 정적 팩토리 메서드이다. 정적 팩토리 메서드는 이름을 가질 수 있고 그 이름으로 의미상 추론을 할 수 있다. 이 메시지는 이름을 원하다라는 의미를 갖고있다. person 이라는 객체를 생성 후 파라미터를 받을 때 ..
[Book] 되새김질
'객체지향 프로그램' 이란 무엇일까? 실세계를 모방하여 추상화와 은유 기반으로 새로운 세계를 창조한 프로그램이다. 공동의 목표 즉, 서비스를 달성하기 위해 책임과 역할 협력을 적절히 사용한 프로그램이다. '자율성' 을 가진 객체는 우수 객체가 된다. 다른 객체가 직접적으로 접근하여 컨트롤 하는 것 보다 책임을 부여하고 자신이 처리하는 것이 바람직한 프로그램이다. 어떻게 수행하는지는 알 필요가 없다. 단지 무엇을 수행하는지만 아는것이 중요하다. 과정보다 결과를 중요시하는 것처럼.. '책임 주도 설계' 중요하다! 행동을 먼저 고민하고 상태를 고민하라!. 회원 정보를 '저장하는 행동' 을 고려해본 다음 정보를 저장하는데 '무엇' 을 저장해야하는가? 를 고민하게 된다. 행동을 결정하게 하는 것은 협력이다! 협력..
[CS] 프로세스와 스레드 기초 지식
프로그램 ( Program ) 사전적인 의미는 수행 절차를 기록한 것이다. 프로세스 ( Process ) 사전적인 의미는 연속적으로 수행되고 있는 절차인데, 컴퓨터 용어로 바꾸어 말하면 연속적으로 실행되고 있는 컴퓨터 프로그램이라고 말한다. 기억장치에서 메모리 올라간 프로그램을 프로세스라 말한다. 운영체제로부터 시스템 자원을 할당받는 작업의 단위이다. 시스템자원 중앙처리장치의 시간 메모리 공간 code data stack heap 특징 기본적으로 1개 이상의 스레드를 가집니다. 운영체제로부터 독립적인 메모리 공간을 할당 받는다. 독립적인 메모리 공간을 할당 받은 곳에서 실행되므로 다른 프로세스의 자원에 공유가 어렵다. 다른 프로세스 자원을 공유 하려면 프로세스 통신( ips ) 을 해야한다. 스레드 ( ..
[CS] 컴퓨터의 기능과 구성
컴퓨터 기능 입력 : 데이터를 입력하는 기능 연산 : 논리 연산, 사칙 연산을 수행하는 기능 기억 : 입력 데이터와 처리 결과, 프로그램 등을 기억하는 기능 제어 : 명령을 해독하고 각 장치를 제어하는 기능 출력 : 처리 결과를 출력하는 기능 분류 대분류 소분류 하드웨어 중앙처리장치 : cpu 명령을 해독하고 실행하는 장치 구성 제어창지 : 중앙처리장치 내에 일어나는 모든 작업들을 제어한다. 연산장치 : 제어장치의 신호에 따라 사칙, 논리연산을 수행한다. 레지스터 : 명령을 수행하는 동안 또 다른 명령어(데이터) 들을 저장한다. 실행순서 5단계 인출 : 메모리에 명령어를 불러온다.( 메모리 주소값) 해독 : 인출된 명령어를 해독하고 데이터와 연산정보를 추출하고 각 장치에 신호를 보낸다. 실행 : 추출된 ..
[Book] 3장) 타입과 추상화
학습 내용 타입과 추상화에 대한 이해 추상화 목적 명확하게 이해하기 위해 특정 부분을 생략하고 감춤으로써 복잡도를 극복하는 것이 목적이다. 방법 첫번째 : 객체들간의 공통점을 합하고 차이점은 버리는 일반화를 통해 단순하게 만든다. 두번째 : 중요 부분을 강조하기 위해 불필요한 세부 사항을 제거하여 단순하게 만든다 개념 일반화한 추상적인 사람들의 생각. 언어와 사고의 기본 단위이다. (출처 : 나무위키) 3가지 관점 심볼 : 개념의 간략한 이름. 내연 : 개념을 완전히 나타낼 수 있고 의미를 통해 객체가 개념에 속하는지 알 수 있다. 외연 : 개념에 속하는 모든 객체의 집합. 개념을 이용해 공통점을 가진 객체들을 분류하여 복잡성을 극복 할 수 있다. 분류 객체에 특정한 개념을 적용하는 작업 중요도 : 분류..
[Book] 1장) 협력하는 객체
학습 내용 객체지향의 이해 객체지향 실세계를 모방하고 추상화, 은유 기반을 거처 프로그램 내에 새로운 세계를 창조 공동의 목표를 달성하기 위해 서로 메시지를 주고 받으며 협력을 하는 과정에서 암묵적인 역할과 책임을 가지고 있는 형태 객체는 자율성을 가지고 있어야 한다. 자율성이란 객체 자기 자신이 판단을 하고 요청을 처리하는 것을 말한다. 캡술화 객체 상태를 외부에서 접근을 못하도록 감추고 행동에 대해서 어떻게 처리하는지는 알 필요 없고 무엇을 하는지만 알면 된다. 장점 여러 사람들이 역할을 수행할 수 있다. 한사람이 동시에 여러 역할을 할 수 있다. 역할은 대체 가능성을 의미한다. 책임을 수행하는 방법은 자율적으로 선택 할 수 있다. 예제 코드 Member.class 책임 인바디 측정하러 이동 자료를 ..
[Book] 7장) 함께 모으기
개념, 명세, 구현 관점 순서대로 개발 개념 관점 도메인 실제 도메인의 규칙과 제약을 최대한 반영 명세 관점 공용 인터페이스 객체들의 책임에 초점 구현 관점 클래스의 속성, 메서드 '어떻게' 수행 할 것인가에 초점 public class Customer { public Coffee order(String menuName, Menu menu, Barista barista) { MenuItem menuItem = menu.chooseMenu(menuName); Coffee coffee = barista.makeCoffee(menuItem); return coffee; } } public class Menu { private List menuItemList; public Menu(List menuItemLis..
[Book] 6장) 객체 지도
객체 지도 지도 잘 변하지 않는 지형을 토대로 만들어 짐 안정적인 구조 바탕으로 설계 객체 지향 프로그램의 설계의 접근법 기능 과 구조를 바탕 설계 구조 도메인 모델 대상을 일반화 한 모델 안정적인 구조 불안정한 기능을 담아도 변경에 대한 유연한 대응이 가능하다. 표현적 차이 객체는 추상화가 아니라 은유를 기반으로 창조된다. 기능 유스케이스 사용자 목표를 통해 연관된 시나리오의 집합 특성 사용자와 시스템 간에 상호작용을 보여주는 '텍스트' 이다. 여러 시나리오의 집합 기능의 목록을 나열한 것에 연관된 기능들을 알 수 있다. 인터페이스와 관련된 세부 사항은 포함하지 않는다. 내부 설계와 관련된 정보를 포함하지 않는다. 유스케이스는 설계 기법도, 객체지향 기법도 아니다. 시스템 내부 구조와 작동 원리같은 내..
[Book] 5장) 책임과 메시지
자율성 타인이 아닌 자기 자신이 행동을 하는 특성 자율적인 책임 요청을 자신의 판단에 처리하는 것 자율적인 객체와 유연한 협력 관계가 품질 좌지우지한다. 특징 어떻게 ( How ) 가 아니라 무엇 ( What ) 을 해야 하는가를 설명 메시지 행동을 수행하게 하는 자극제 조합 구조 수신자 , 메시지 이름, 인자 ex ) public String hello(String message) {}; 어떻게 ( How ) 처리 할지 명시하지 않고 무엇 ( What ) 이 실행되기를 명시 메서드 메시지 처리를 위한 내부적 선택 방법 다형성 서로 다른 객체가 동일한 메시지에 대해 다르게 반응 대체 가능성을 보고 설계 재사용성 유연한 협력 관계 유지 확장 가능성 메시지의 중요 메시지를 중심으로 협력을 설계 무엇, 어떤 ..
[JAVA] JVM 구조
학습 내용 JVM 구조 이해 특징 하드웨어 및 운영체제 독립성 컴파일 된 코드의 작은 크기 보안 런타임에 다양한 메모리 영역 조작 클래스 로더 컴파일 된 바이트 코드를 읽어와 메모리 영역에 배치 영역 구분 로딩 클래스 파일을 읽음 class, interface, enum, 메서드, 변수 를 메서드 ( Method ) 영역에 저장. 로딩이 끝난 후 해당 타입의 객체를 Class 객체로 생성하여 힙 ( Heap ) 영역에 저장. 링크 클래스나 인터페이스를 JVM 으로 연결 후 실행 초기화 staic 값을 초기화 및 변수 할당 메모리 영역 구분 Thread 에서 자원 공유 스택 Thread 마다 Runtime Stack 을 만들고 Stack Frame 을 push 한다. Stack Trace pc ( Prog..
[JDBC] JDBC 란 무엇일까
학습내용 JDBC 에 대한 이해 여러 종류의 DBMS 각 회사의 DBMS 는 의 코드가 다르다 문제 각 회사의 코드들을 알아야함. DBMS 변경시 코드 수정이 매번 일어남. JDBC 각 회사의 DBMS를 사용하는데의 문제점을 개선하고 단일화 시킨 java api 이다. 사용 순서 드라이버 로드 연결 생성 문장 실행 결과집합 사용