우아한 테크코스 1주차 요약 2월 13일 : 오리엔테이션 / 연극 조 팀원들과 친해지는 시간 2월 14일 : 단위 테스트 학습 / 자동차 경주 미션 진행 (feat. 페어 프로그래밍) 2월 15일 : 자동차 경주 미션 마감 (feat. 페어 프로그래밍) 2월 16일 : 자동차 경주 미션 피드백 / 연극 리허설 1주차 소감 [최적의 루틴 찾기] 1주차는 정말 정신 없이 지나갔다. 정말 정말 정신없이 .. 😶 뭔가 새로운 걸 해내기보다는 우아한테크코스라는 공간, 시간에 적응하면서 나의 생활 리듬을 찾아가는 것이 1주차의 목표였다. 자취를 새로 시작했기 때문에 환경에 대한 적응 시간을 가지고, 나의 생활 패턴을 계획하고 이것 저것 테스트해보았다. 결과적으로 내가 가장 편안할 수 있으며 내가 해야 할 일을 해낼..
책임과 메시지 객체지향 패러다임이 전통적인 패러다임에 비해 우월한 이유는 뭘까? 객체지향에서는 명확한 책임을 가진 객체들이 협력에 참여해야 한다. 그러나 책임은 ‘어떻게’가 아닌 ‘무엇을’ 이라는 형태로 나타나야 하며, 객체가 책임을 수행하는 방식의 자율성을 보장해주어야 한다. 객체는 메세지를 전송하여 다른 객체에게 접근할 수 있다. 이 메시지에 추가적인 정보가 필요하면 인자(argument)로 이를 표현할 수 있다. 메서드 객체에게 메시지를 전송하면 결과적으로 메시지에 대응되는 메서드가 실행된다. 어떤 메서드를 호출할 지 실행 시간에 결정할 수 있는 것은 객체지향의 핵심이다. 다형성 다형성은 서로 다른 타입에 속하는 객체가 동일한 메시지를 수신할 경우, 서로 다른 메서드로 이를 처리할 수 있는 메커니즘..
타입과 추상화 개념 개념(concept)이란 공통점을 기반으로 객체들을 하나로 묶기 위한 그릇이다. 개념을 이용하면 서로 다른 객체를 여러 그룹으로 분류할 수 있다. 이렇게 분류된 그룹 안에 속한 하나의 객체를 그 개념의 인스턴스 (instance) 라고 한다. 즉, 객체는 특정 개념에 적용되었을 때 ‘인스턴스’라고 부를 수 있다. 따라서 우리가 많은 사물들의 공통점을 통해 개념을 확립하고, 분류하였을 때 비로소 하나의 객체는 인스턴스로 사용될 수 있는 것이다. 개념은 세 가지 관점으로 해석할 수 있다. 심볼 (symbol) - 개념을 지칭하는 명칭 내연 (intension) - 개념의 정의 외연 (extension) - 개념에 속하는 모든 객체의 집합 타입(type) 객체를 분류함으로써 우리는 객체들의..
협력하는 객체들의 공동체 객체지향이라는 예술은 적절한 객체에게 적절한 책임을 할당하는 것에서 시작된다. 객체지향 설계를 하기 전, 객체의 역할을 확립하자. 객체의 역할은 아래와 같은 특징을 가진다. 여러 객체가 동일한 역할을 수행할 수 있다. 하나의 객체가 여러 역할을 수행할 수 있다. 역할은 대체 가능성을 의미한다. 객체는 책임을 다하는 방법을 선택할 수 있다. 협력하는 객체의 덕목 다른 객체의 요청한 것 (what)에 협력적으로 응답한다. 객체가 어떻게 (how) 응답하는 지에 대해 충분히 자율적이다. 객체는 자율적이기 위해서 어떤 행동(behavior)을 하기 위해 필요한 상태(state)를 알고 있어야 한다. 예를 들어, 바리스타는 커피 제조를 위한 방법을 기억하는 상태에 있고, 그렇기 때문에 이..
앞서 트랜잭션 경계를 설정하기 위해 서비스 추상화 기법을 사용하였고, UserService안에 트랜잭션 관련한 코드를 기입하였다. AOP를 사용하는 이유 중 가장 대표적인 것은 선언적 트랜잭션 기능이다. 트랜잭션 경계 설정을 조금 더 세련되게 수정하는 과정에서 AOP를 사용해보는 파트이다. 우선, 이전 시간에서 UserServiceTest에서 UserDao와 MailSender 오브젝트를 호출하여 통합 테스트를 진행하는 것을 실습하였다. 각각의 오브젝트를 직접 고립시켜보고, 외부 DB 등과 같은 환경에 종속되지 않는 단위 테스트를 구현해보자. 트랜잭션 코드의 분리 public void upgradeLevels() throws Exception { // 트랜잭션 시작 TransactionStatus sta..
4장에서 데이터베이스에 접근하는 기술이 다양함을 볼 수 있었듯이, 여러 환경이나 상황에서 기술이 바뀌고 다른 API를 사용하기 때문에 성격이 비슷한 여러 기술을 추상화하고 이를 일관되게 사용할 수 있도록 하는 것은 중요하다. 데이터를 가져오고 입력하는 역할을 하는 UserDao에 사용자의 레벨을 관리하는 기능을 추가하고 싶다. 그러나 레벨 관리와 관련한 복잡한 비즈니스 로직은 UserDao가 아닌 비즈니스 로직 서비스를 제공한다는 의미에서 UserService에서 관리한다. UserService는 UserDao의 빈을 DI 받아 사용한다. UserDao의 구현 클래스가 바뀌어도 UserService는 영향을 받지 않는다 public class UserService { UserDao userDao; pub..
모든 예외는 적절하게 복구되거나 작업을 중단시키고 개발자에게 통보되어야 한다. 자바에서 프로그램 상에 Throw 할 수 있는 예외는 총 세가지 종류가 있다. 예외의 종류 java.lang.Error의 서브 클래스 OutOfMemoryError나 ThreadDeath와 같이 자바 VM에서 발생시키는 에러를 말한다. Exception과 Checked Exception 개발자의 애플리케이션 코드에서 발생한 에러이다. Checked Exception이란 Exception의 서브 클래스이면서 RuntimeException을 상속하지 않은 것을 의미한다. 체크 예외가 발생하는 코드를 작성할 때는 예외를 처리하는 코드를 반드시 함께 작성한다. 예를 들어, 존재하지 않는 파일의 이름을 입력한 FileNotFoundEx..
2023.06.30 - [Other/기록] - [회고] 2023년 상반기 회고 👶 그리고 하반기 목표 [회고] 2023년 상반기 회고 👶 그리고 하반기 목표 부끄럽지만 .. 2023년 상반기를 마무리하며 처음으로 회고 글을 작성해보려고 한다. 2023 상반기를 짧게 정리하자면, 흘러가는 대로 살던 내가 마음을 고쳐먹고 크게 성장한 시기라고 할 수 있다. mingyum119.tistory.com 2023년 6월 30일에 작성한 상반기 회고에서 하반기의 목표를 언급했었다. 어느새 시간이 훌쩍 지나 12월 30일이다 😮 딱 6개월이 지나고 많은 게 달라진 지금이다. 상반기 회고를 작성할 때면 내가 많이 부족하다는 생각에 힘들어했던 것 같은데, 그래도 나름의 결과물을 내고 이것저것 나만의 스토리를 만들어 온 덕..
우아한테크코스 6기 백엔드 최종 합격 후기 이 제목의 회고글을 쓸 수 있다니 .. 🥲 기다려왔던 순간인데 아직도 얼떨떨하고 현실감이 느껴지지 않는다. 최종 합격자 발표가 있던 오늘, 오후 내내 스터디가 있었기에 메일을 일부러 보지 않기로 했다. 왜냐하면 합격을 하던, 불합격을 하던 그 감정을 참아내며 스터디를 진행할 수 없을 것이라고 생각해서였다. 그런데 2시부터 다리가 덜덜 떨리고 심장이 쿵쿵 뛰어서 도무지 집중할 수가 없어서 결국 메일을 보게 되었는데, 왠걸 합격이었다 🥰 최종 코딩테스트를 응시한 이후로 최종 합격 메일을 열람하는 순간이 계속 꿈에 나왔다. 합격하는 꿈을 꾸고 일어나서도 너무 생생해서 그게 현실이 아니라는 것에 절망하고 ..... 아무튼 별 짓을 다했다. 최선을 다했다고, 결과에 상관..