인프런 워밍업 스터디 클럽 2기 -백앤드 클린코드,테스트코드 1주차 발자국
1주차 진도는 readable 강의 세션 1~ 세션 4까지 였다.
취직하면 유용할 리더블코드랑 테스트 코드 강의를 쿠폰 사용해서 할인받아서 살수있어서 쵝오! (뿌듯) 이 강의 를 들으면서 스터디에 참여할수있고 일석이조! 무엇보다 테스트코드 짜기 힘들어서 고민하고 있던 찰라여서 리더블코드 뒤에 배우는 테스트 코드 강의도 매우 기대된당! 실무에선 테스트 코드 짜는데 시간을 매우 많이 쓴다고 들었당.. 개발자 사회에 나가기 무서워 바들거리는 나약한 늙은 취준생..에겐 암튼 찰떡이당.
숙제도 화, 목 이렇게 두개 있어서 부지런히 해야했다! (하지만 부지런하지 못해 last minute에 허겁지겁 했지..)
게으르고 가련한 취준생 에게 이렇게 숙제도 있어서 주워진 시간에 맞춰야하는 강의를 들어야 하는 스터디는 너무 좋은거 같아서 기쁘당!
>_< 알려주신 분들께 감사!
4LS-회고법을 사용해보장!
Liked (좋았던 점)
강사 선생님이 내어 주신 숙제를 통해 강의에서 배운거를 한번 적용하거나 정리할수 있고 또 함께 스터디 하는 분이랑 같이 배운거에 대해서 이야기할수있고 모르는건 물어볼수 있어서 좋았다. 개발자 친구들 생긴 기분 >_<v
기간 내에 진도를 나가야지 숙제도 할수있고 또 스터디니 모르는건 같이 공부하는 사람들이랑 이야기하니 좋았당.
스프링 오픈톡에서 추천받아서 참여한거라서 같이 스터디에 참여하신 분도 계시고 그래서 이번에 코드리뷰도 해주셔서 더 많이 배웠당! 유익한 시간!
모르는 미지의 세계에 대한 격한 두려움이 있는 비전공자지만 이번 강의에 내가 좋아하는 뇌과학이랑 시도 나오고 추상화에 대해서 생각해보면서 추상화와 시랑 비교해볼수있어서 조금은 그 두려움이 사라진거 같기도 하다!
Lacked (아쉬웠던 점)
생각보다 양이 많고 나는 코드까지 따라치니 시간이 많이 걸려서 이제 부터는 더 부지런히 준비해야한다. ☹
이건 내가 좀 더 노력하면 되는 문제! 하지만 현직 개발자분들에겐 초큼 양이 많지 않을까 싶지만 난 좋음!
Learned (배운 점)
지겹게 배운 SOLID 한번 더 배우니 조금 더 머리에 잘 정리된거 같고 좋다 이제 조금 워드보단 원리로 더 친숙해진거 같아서 굳.. 리더블 코드라는 강의 주제 답게 실무에서 리더블 코드의 중요성에 대해서 다시 생각하게 되었다.
1- 이름 짓기의 중요성
개발자들은 실무에서 찰떡같은 이름을 짓기위해서 많은 생각하는 시간을 보낸다고 한다.
협업하는 프로젝트일수록 진짜 이름 짓기가 중요하다. 내 시간도 절약되지만 타인의 시간도 절약시켜주니.
관용어처럼 줄이는 단어가 아니면 짧게 줄이는 이름보다 직관적으로 바로 이해할수있게 풀네임으로 짓는게 좋다고 한다.
메서드 이름과 함께 param을 연결 시켜서 문장 만들면 더 직관적인 코드가 된다. 이건 진짜 센스가 필요할거같다.. 연습해봐야지!
2- 뇌 메모리 적게 사용하기
코테도 프로젝트도 겨우 겨우 구현하기 바빠서 한번도 생각 못해본건데 똑똑한 방법 같다. 너무 하나 하나 메서드로 만드는거 아닌가 했지만 깔끔해지긴 했다. 상황에 따라서 어떤게 더 직관적일지 판단해서 사용하는게 좋을거같다.
if()문 안에 들어간 계산 법까지 메서드로 만드는 방법. 😮
3- Optional 사용 최소화하기
원래도 옵션널에서 꺼낼때 .get().getId() 이런 방식으로 코드가 짜여지는게 싫어서 .orElseThrow 사용해서 exception을 받아오긴 했는데 optional로 들어간 객체는 클래스안에서 반환할때 그냥 객체보다 무겁다고 한다. 이거 몰랐당!!
.orElse랑 .orElseGet 이 두개가 조금 차이가 있으니 사용할때 조심하장
.orElse()는 들어가보면 삼항?연산자( (number==7) ? true : false)를 사용하기 때문에 확정된 값만 사용한다.(null이 아닐때도 실행된다고 한다)
.orElseGet - null인 경우만 실행된다.
4- abstract 와 interface의 차이점
Abstract Class
상속: 단 하나의 클래스만 상속받을 수 있다 (단일 상속).
특징: 공통된 속성과 메서드를 포함하고, 자손 클래스에서 반드시 구현해야 할 추상 메서드를 가질 수 있다.
용도: 관련된 클래스들 사이의 기본적인 구조와 행동을 정의하는 데 유용하다.
예시: 기본 클래스에서 공통 기능을 구현하고, 자식 클래스에서 이를 확장할 수 있다.
Interface
상속: 여러 개의 인터페이스를 구현할 수 있으며, 인터페이스 간의 다중 상속이 가능하다.
특징: 메서드 선언만 포함되며, 구현은 제공하지 않는다. 각 클래스가 필요에 따라 메서드를 구현해야 한다.
용도: 특정 기능이나 역할을 정의하고, 서로 다른 클래스들이 이 기능을 공유하도록 한다.
조합: 인터페이스를 잘게 나눠서 여러 개로 만들 수 있어, 불필요한 메서드를 피하고 필요한 기능만 구현하도록 할 수 있다.
예시: 자동차 만들기
Abstract Class (차)
자동차의 기본적인 구조와 공통 속성을 정의합니다. 예를 들어, Car
라는 추상 클래스가 있을 수 있습니다. 이 클래스는 모든 자동차가 공통적으로 가지는 속성(예: 브랜드, 모델, 연료 종류 등)과 메서드(예: startEngine()
, stopEngine()
)를 포함할 수 있습니다.
Interface (기능들)
인터페이스는 자동차가 수행할 수 있는 다양한 기능을 정의합니다. 예를 들어, Driveable
, Flyable
, Electric
같은 인터페이스가 있을 수 있습니다. 각 인터페이스는 특정 기능을 나타내며, 이를 구현하는 클래스는 해당 기능을 실제로 수행하는 메서드를 구현해야 합니다.
예시:
abstract class Car { String brand; String model; abstract void startEngine(); abstract void stopEngine(); } interface Driveable { void drive(); } interface Flyable { void fly(); } interface Electric { void charge(); }
차 (Abstract Class): 자동차의 기본 구조와 공통 기능을 정의.
기능들 (Interfaces): 자동차가 가질 수 있는 다양한 기능을 정의하여, 여러 클래스가 이를 구현할 수 있도록 함.
Longed for (앞으로 바라는 점)
미리 미리 열심히 해서 조금 더 깊이 있게 공부 하고 싶당.. 이건 나만 부지런해 노력하면 되는 일.. ☹ 다음에는 cs도 들어보곱.. 햐..
댓글을 작성해보세요.