분류 전체보기(324)
-
[Algorithm Week_9&10] DP : Dynamic Programming
[Algorithm Week_3] Recursion Recursion - 자기 자신을 호출하는 구조? - 알고리즘 설계 & 문제해결의 필수 Recursion의 예 1) Factorial 2) 자료구조 (LinkedList & Binary Tree) LinkedList Null은 List이다 어떤 A가 List이면, A앞에 노드.. cs-ssupport.tistory.com "Fn은 n번째 피보나치 수" ▶ 1-(b) Solution 1-(a)에서 "추상적인 문제"를 묘사했다면 여기서 "해당 문제에 대한 Algorithm | 점화식"을 설계해야 한다 DP에서 점화식없이 문제를 해결할 수가 없다 2. Build Solutions to your recurrence from the bottom up 정의한 Pr..
2022.05.18 -
[Spring - 기본] 의존관계 자동 주입
@Component & @ComponentScan에 의해서 자동으로 빈을 등록해준다면 스프링 빈들의 DI를 굳이 수동으로 해줄 필요도 없고 수동으로 하면 복잡해진다. 따라서 자동 빈 등록에 대한 "의존관계 자동 주입"도 더불어서 가져가주는게 낫다 DI 방식 1. 생성자 주입 우리가 지금까지 사용하고 있던 방식이 "생성자 주입"이고 이 방식을 대부분 사용한다 생성자 주입의 특징은 다음과 같다 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다 불변/필수 의존관계에 사용된다 생성자는 객체가 생성될 때 딱 1번만 호출되기 때문에 만약 그때 DI가 된다면 이후에 변경될 일이 아예 없다 그리고 대부분 주입 대상을 필드 상에서 final로 지정하는데 final로 지정하면 초기화를 해주든 생성자에 넣어주든 해줘야 하..
2022.05.15 -
[Spring - 기본] 컴포넌트 스캔
컴포넌트 스캔 @Configuration public class AppConfig { @Bean public MemberRepository memberRepository(){ return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy(){ //return new FixDiscountPolicy(); return new RateDiscountPolicy(); } @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService(){ return n..
2022.05.15 -
[Spring - 기본] 싱글톤 컨테이너
웹 애플리케이션 & 싱글톤 웹 애플리케이션 거의 대부분 여러 user가 동시에 접속한다 여러명의 고객이 서비스에 join을 하기 위해 서로 memberService를 호출하게 된다면?? 만약 고객 트래픽이 초당 100이 나온다면 초당 100개의 memberService 객체가 생성되고 소멸된다 >> 이것은 굉장한 메모리 낭비이다 이러한 문제점을 해결하는 간단한 방법은 "해당 객체를 1개만 생성하고 여러 user가 공유하도록 설계"하면 된다. 이러한 방식을 "싱글톤 패턴"이라고 한다 싱글톤 패턴 싱글톤 패턴은 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다 따라서 객체의 인스턴스가 2개 이상 생성되지 못하도록 막아줘야 한다 생성자를 private로 선언해서 외부에서 임의로 new를 통..
2022.05.14 -
[AI] 감독/교사 학습 (Supervised Learning) - (2)
Supervised Learning에서 Agent는 인간이 부여한 몇가지의 Example을 통해서 학습을 한다고 설명했다 이 때 Agent는 Example들에 대한 "가설 함수"를 찾아내는 것이 학습의 목적이다 당연히 Agent가 가설함수를 도출해냈으면 그 가설함수에 대한 "평가 & 선택"을 해야 한다 모델 선택 최종 결정되는 모델은 결국 여러 가설함수중 Best를 선택할 것이다 1. Model Selection "가설 공간"을 정의한다 가설 공간은 그냥 다항식의 차수를 의미한다 2. Parameter Optimization 가설 공간내에서 최고의 가설 함수를 찾아야 한다 결국 다항식의 차수를 인간이 결정해주었다면 Agent는 그 다항식에 대한 "계수"를 Learning을 통해서 알아내야 한다 ※ 모델 ..
2022.05.14 -
[AI] 감독/교사 학습 (Supervised Learning) - (1)
Supervised Learning Supervised Learning은 인간이 Label된 Data(input - intput에 대한 output)을 부여하고 Agent는 받은 여러 Example들을 통해서 input에 대한 output이 도출되는 "가설 함수"를 찾아내야 한다 Learning Problem 1. 목적함수 F F란 input data에 대해서 언제나 반드시 output을 결정할 수 있어야 한다 단, Agent(학습자)는 영원히 F를 모른다 Agent가 Learning을 통해서 얻는 것은 F와 최대한 비슷한 "가설함수 H"를 찾아내는 것이다 2. Example (input - output pair) Agent는 (input - output pair)로 이루어진 여러개의 Example들을 ..
2022.05.14 -
[AI] Learning
Learning AI에서 학습은 단지 무엇을 배운다고 끝나는 것이 아니다 배운다는 경험을 토대로 에이전트의 작업 성능이 개선이 되어야 그 에이전트는 "학습 능력이 존재"한다고 볼 수 있다 이러한 점은 인간도 마찬가지이다 아무리 가르쳐줘도 발전이 없는 사람은 학습 능력이 전혀 없는 사람이라고 볼 수 있다 반면에 가르쳐줄수록 경험이 쌓이고 그에 따른 성능이 개선되는 사람은 학습 능력이 있다고 볼 수 있다 학습의 필요성 1. 설계자는 미래에 일어날 모든 가능한 상황과 변화에 대해서 에이전트를 처음 설계할 때는 예상할 수 없다 따라서 Agent에게 학습은 필수적이다. 학습을 통해서 설계자가 예상하지 못한 이벤트에 대해서 대처할 수 있는 능력을 만들어야 한다 2. 프로그래머도 사람이기 때문에, 어떠한 상황에 대해..
2022.05.14 -
[Spring - 기본] 스프링 컨테이너와 스프링
스프링 컨테이너 스프링 컨테이너는 스프링 빈 객체들의 생명 주기를 관리하고, 생성된 Bean 객체들에 대해서 부가적인 기능을 제공하는 역할을 한다. 빈 객체가 Singleton일 경우 해당되는 정의 Prototype일 경우 생명주기 전체를 관리하지 않고, 빈 객체의 초기화까지만 관여하고 이후에는 전혀 관여 X 일반적으로 코딩을하면 객체를 생성하는 것은 개발자가 해주는 일이다. 하지만 스프링 컨테이너는 IoC라는 제어의 역전 개념을 통해서 이러한 객체 관련 일들을 대신 해준다 그리고 의존 관계 주입(DI)도 스프링 컨테이너에서 빈 객체를 생성 후 자동으로 맺어준다 @Configuration으로 지정한 스프링 설정 클래스인 AppConfig를 "스프링 컨테이너"를 생성할 때 파라미터로 전달해준다 위 코드에서..
2022.05.13 -
[SE] 프로세스와 방법론
프로세스 & 방법론 "어떤 일을 하기 위한 특별한 방법 :: 단계나 작업으로 구성됨" 결국 소프트웨어에 대한 공학적 접근의 가장 핵심은 "프로세스"이다 결론적으로 프로세스란 소프트웨어를 개발하는 공정을 정의한 것이다 이렇게 정의된 작업들을 "어떤 순서로 어떤 방법으로 하는가"를 다루는 것이 방법론이다 프로세스 없이 무작정 개발을 시작하게 되면 "Code & Fix"가 반복된다 처음에는 개발속도가 빠르겠지만 나중에는 개발하는거보다 개발 시에 발생한 오류를 고치는데 더 시간을 많이 쓰게 될 것이다. 따라서 진도가 나아가지 못하고 정체될 것이다 Code & Fix는 다음과 같은 문제점을 발생시킨다 1. 고객들의 needs를 파악하거나 설계하는 작업의 중요성을 절대 모른다 2. 설계 작업없이 무작정 코딩과 수정..
2022.05.13 -
[SE] 소프트웨어란?
4차 산업혁명에 들어서면서 모든 분야에서 IT기술이 사용되고 있고 그에 따라서 컴퓨터는 현재 사회의 모든 분야에서 사용되고 있다 "컴퓨터"라는 기계의 잠재력을 살려주는 것이 "소프트웨어"라고 할 수 있다 소프트웨어는 컴퓨터를 편리하고 안전하게 작동시킬 수 있는 프로그램으로써 하드웨어의 동작을 제어하는 수많은 명령어로 구성되어 있다 소프트웨어가 사회적으로 주는 영향이 커짐에 따라서 당연히 수요가 급증하고 있다. 따라서 소프트웨어 개발은 굉장히 중요한 문제이다 소프트웨어 개발은 단순히 cs지식과 코딩만 잘한다고 되는 것이 아닌 설계 및 테스트 / 응용 분야에 대한 이해 / .. 등등 고려해야할 요소들이 굉장히 많다 소프트웨어 공학의 주 목적은 주어진 비용과 자원 안에서 최대한 품질이 좋은 소프트웨어를 생산하..
2022.05.11 -
[Spring - 기본] 객체 지향 설계와 스프링
좋은 객체 지향 프로그래밍? 객체 지향의 특징은 매우 기본적인 다음 4가지이다 추상화 캡슐화 상속 다형성 "객체 지향" 프로그래밍의 의미는 "절차 지향" 프로그래밍에서 전체적인 명령어를 하나의 흐름으로 보고 처리하는 것과 달리 전체적인 명령어를 "여러개의 독립적인 객체"로 나누어서 프로그래밍 하자는 것이다 여기서 나누어진 "독립적인 객체들"은 서로 메시지를 주고받을 수도 있고 데이터를 처리할 수도 있다 :: "협력" 그리고 "다형성"이라는 강력한 특징을 활용해서 프로그램을 유연하고 변경이 용이하게 만들 수 있다 유연하고 변경이 용이하다는 의미는 집에 있는 콘센트?의 개념과 비슷하다 콘센트라는 것은 규격이 정해져있고 규격에 맞는 플러그들은 전부 꽂을 수 있다 다형성 다형성의 의미는 매우 모호하지만 결론적으..
2022.05.11 -
[AI] 전통적 계획 수립 - PDDL
Planning (초기 상태 → 목표 상태)에 도달하기 위한 "Sequence Of Action"을 찾아내는 것 ※ 계획 수립 (초기 상태 → 목표 상태)에 도달하기 위한 "Sequence Of Action"을 찾기 위해서 필요한 여러가지 환경/요소 등을 정의하는 것 >> 이렇게 도출된 Solution Plan은 "Optimal"해야 한다 최소 비용으로 목표에 도달 전통적 계획 수립의 여러가지 가정들 1. Environment [AI] Agent Agent (Rational Agent) 1. 자신이 놓인 환경에 대해서 "센서"를 통해서 환경에 대한 상태를 "추정" (Sensor Value 획득) 환경이 현재 어떤 상태인가 그 환경 속에서 나는 어떤 상태인가 2. Effectors를 통해서.. cs-ssu..
2022.04.30