직관적이지만 효율성이 낮은 코드 vs 난해하지만 주어진 문제를 효율적으로 해결하는 코드 ? 뭘 선택해야 할까? >> 알고리즘 테스트는 문제를 어떻게든 테스트 케이스를 다 맞춰야하니까, 후자를 택하는 게 좋겠다. 하지만 깔끔하고 직관적인 코드를 놓치고 싶지 않다. 오류 잡기가 수월하니까. 그리고 멀리 본다면 직관이 좋은 코드가 좋다. 프로젝트에 참여했을 때 유지보수하기 좋고 다른 사람도 이해가 가능해야 하기 때문이다. 현재 일단 둘 다 신경 쓰면서 짜고 있다. 근데 신경쓰며 코드를 작성하니 시간이 오래걸린다. 이게 알고리즘 테스트를 준비하는 자세가 맞나? >> 아니다. 둘 다 신경 써야하는 것은 맞지만 방법이 잘못되었다. 보완! 다음부터는 일단 통과하는 것에 초점을 두고 맞추고 나서 리펙토링하는 시간을 갖..
이어서, 스프링으로 자바를 이용한 예제에서 이제는 스프링을 적용시켜보자 Appconfig에는 @Configuration을 붙여주면 되고, 나머지 객체를 생성하고 의존관계를 주입해주는 메서드에는 @Bean을 붙여준다. 이제 클라이언트는 AppConfig를 객체를 생성해서 메서드로 서비스 객체를 가지고 오지 않는다. 하지만 AppConfig의 스프링 컨테이너를 생성하고 스프링이 관리해주는 각 서비스객체와 매칭되는 스프링 빈들을 통해서 기존과 같은 기능을 구현할 수 있다! 코드로 보자! OrderApp.java public class OrderApp { public static void main(String[] args) { //AppConfig appConfig = new AppConfig(); //Memb..
0. 독서하면 똑똑해질까? 과연? 그대 생각은 어떠한가? 1. 독서가 똑똑함, 현명함, 영리함을 보장하지 않는다. 분명 피상적인 지식은 많아질 수 있는 것 같다. 그렇다면 똑똑한 척은 가능하다. 기억한 것만 주저리 내뱉으면 그런 사람으로 보이기 때문이다. 그래도 안하는 것 보다는 이점은 있다고 할 수 있겠다. 피상적인 지식이 많다면 사고할 재료가 많다는 것을 뜻한다. 사고하려고만 하면 독서를 하지 않는 사람보다 더 폭 넓은 사고가 가능하다. 하지만 폭넓게 사고할 가능성이 똑똑한 것을 보장하지 않는다. 폭이 넓다할지라도 옳지 않을 가능성이 있고, 생각의 깊이가 낮을 수 있다. 2. 올바르게 독서해야 한다. 똑똑해지는 독서를 하려면 문해력, 사고력, 응용력이 필요하다. why? 1. 저자의 문장을 오해 가능..
MSA 졸업과제 주제 1. 왜 마이크로 서비스 & 클라우드 기술을 써야 하는가? 목적의 출발은 WHY가 되어야 한다. WHY에 피벗을 해야 다양한 관점으로 돌아보는 와중에 새는 것을 막을 수 있기 때문이다. 2. 내가 생각하는 마이크로 서비스를 사용하는 WHY 왜 이 아키텍처인가? 왜 이 아키텍처가 만들어졌는가? 이 아키텍쳐를 다루는 능력이 요즘 기업에서 선호되는가? 실제로 기업의 커리어를 보면 MSA에 능한 사람들을 조건으로 걸고 있음을 확인할 수 있다. 기존 방식에 비해 장점이 있기 때문이다. 주제는 MSA를 사용했을 때 최대로 장점을 뽑아낼 수 있는 주제여야 한다. 또! 반대로 생각해보면 MSA의 단점에 대한 시너지를 내는 주제는 적어도 상관이 없거나 마땅하게 배제되어야 한다. 그래야 컴팩트한 주제..
인터페이스에만 의존하는 클라이언트 public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository = new MemoryMemberRepository(); private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); //하위 생략 } 위 코드의 인터페이스 OrderService를 구현하고 있는 OrderServiceImpl이라는 클라이언트는 DiscontPolicy, MemberRepository뿐만 아니라 FixDiscountPolicy, MemoryMemberRepository라는 구체 클래스에도 의존하는 코드이다...
스프링의 핵심컨셉. 스프링이란? 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크. 객체 지향 언어인 자바가 가진 강력한 특징을 살려내주는 프레임워크이다. 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다. 좋은 객체 지향 프로그래밍 유연하고, 변경이 용이하게 코드를 작성하는 것. 다형성(Polymorphism)이란? 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다. 역할과 구현을 분리함으로써 우리는 다형성을 만족하는 코드를 작성할 수 있다. 쉽게 말하자면, 자동차를 운전하는 입장인 사용자는 자동차 조작법(역할)만 알고 있으면 되고 사실 자동차 엔진이 어떻게 돌아가는지, 자동차의 모델이 무엇인지, 가솔린 자동차인지, 전기자동차인지(구현) 알 필요가 없..
코테하면서 문제점 1. 인덱스를 너무 헷갈려 한다. 인덱스를 친구 1번 -> 0 으로 맵핑시키는 과정에서 돌리는 것 마다 제대로 된 결과가 안나옴. 시작을 1로 잡는게 좋다. 2. 실력부족 한 문제를 보고 완전히 이해해서 해법을 생각하기까지 1시간이 걸림 ㅋㅋ. 실력 부족. 3. 타이핑 속도가 너무 느리다. 4. 단계단계 천천히 풀어야 되는데 당장 그 스텝만 생각하지 못한다. 5. 변수명을 너무 구체적으로 적어서 타이핑할 게 늘어나고, 코드가 길어지니까 직관적이지 못하다. 6. 스텝 별로 바로 쫙 짜야한다는 것을 느꼈다. 한 스텝 스텝을 바로 작동하지 못함. -> 문제풀이 맥이 끊긴다.행동강령 1. 꾸준히 알고리즘 문제를 풀면서 스텝별로 기계적으로 쫙 짜는 것을 연습해야 한다. 2. 키보드를 보지않고 ;..
그렇다면 습관을 형성하는 방법은 뭘까? 우리는 왜 라면을 끊을 수 없는가? 우리는 왜 친한친구와 술을 먹는가? 우리는 왜 사랑하는가? 우리는 왜 선물을 주고 받는가? 우리는 왜 어떤 일을 잘 하려고 하는가? 우리는 왜 본인이 진정으로 존경하는 대상에게 인정받으려 하는가? ... 이런 물음과 답이 같다. 습관을 유지하려면 긍정적인 '감정'의 보상이 있어야 한다. 생각해보면 우리는 기분이 좋아지는 일을 하려고하기 마련이다. 습관 형성도 똑같다. 하고자 하는 일을 습관으로 만드려면 무엇이든 긍정적인 감정의 보상을 쥐어줘야한다. 어떤 일을 해냈을 때 나 자신에게 상을 줘야한다. 물론 긍정적인 감정의 보상만 있다고 해서 습관형성이 짠~ 하고 쉽게 되는 것은 아니다. 신호와 반복행동이 필요하다. 신호는 행동을 자각..