6주차에는 5주차 과제에서 조금 더 수정하는 부분들이 많긴 했다.
자세하게 어떤 부분을 했다고 이야기할 순 없기에, 조금 추상화 시켜야겠다.
(백엔드 특 : 추상화, 객체지향 개좋아함)
조금 더 객체지향적이게?
부스트캠프의 과제가 정확히 무엇인지 이야기할 순 없다. 하지만 비슷한 예시를 들어보자.
class Sentence {
nouns:string[];
verbs:string[];
constructor(inputString:string) {
inputString.split(" ").forEach(words => {
//띄어쓰기로 나눈 단어들을 의미에 따라 인스턴스 배열에 넣는다.
})
}
}
이런 코드가 있다고 생각해보자.
여기에서 Sentence라는 객체를 만들어두고, 이 부분에서 각 배열을 가져온 후 이를 사용한다고 하면, 객체지향적일까?
자바를 공부하던 나에게, 각 단어들이 자기가 할 일을 하고, 단어의 배열들이 할 일을 하게 하는 것이 더 좋은데
나는 왜 이런 똥을 쌌을까 라는 생각도 들었다.
이런 부분들의 코드를 약간만 손보자는 생각으로 했다.
const WORD_TYPE = {
NOUN:"noun",
VERB:"verb"
}
사용해야 할 enum을 구현한 후,
interface Word {
getType():string;
getWord():string;
}
class Words {
private words:Word[]
getWords():Word[] {
return this.words;
}
getType():string {
throw new Error("not extended!");
}
addWord(word:Word):void {
this.words.push(word);
}
}
추상화 시킬 부분들을 만들어두고,
class Noun implements Word {
private word:string;
constructor(word:string) {
this.word = word;
}
getType() {
return WORD_TYPE.NOUN;
}
getWord() {
return this.word;
}
}
class Verb implements Word {
private word:string;
constructor(word:string) {
this.word = word;
}
getType() {
return WORD_TYPE.VERB;
}
getWord() {
return this.word;
}
}
class Nouns extends Words {
constructor(){
super();
}
getType():string {
return WORD_TYPE.NOUN;
}
}
class Verbs extends Words {
constructor(){
super();
}
getType():string {
return WORD_TYPE.VERB;
}
}
추상화된 부분들을 구체화 시킨 뒤,
class Sentence {
nouns:Nouns
verbs:Verbs
constructor(inputString:string) {
inputString.split(" ").forEach(words => {
//띄어쓰기로 나눈 단어들을 의미에 따라 인스턴스 배열에 넣는다.
})
}
}
이를 기존 코드에 집어넣는 식으로 리펙토링 했다.
생산적인 부분에서 빠르게 구현이 되지 않지만, 좋은 점도 있었다.
예를 들어,
형용사, 부사도 파싱해서 따로 사용할 수 있게 해주세요
라는 요청이 온다면, 여기에서 Adverbs, Adjectives라는 컬렉션 객체와, 이에 대한 객체를 만들고 집어넣어주면 끝이다.
과제 구현이 후딱 끝난김에, 이런 식으로 조금 더 구조적으로 활용성이 좋게 만드는 과정을 했다.
이후에 또 뭘 할까 라는 생각을 했다.
Nest.js...?
네이버 부스트캠프 8기의 마지막 6주는 팀 프로젝트를 한다고 했다.
이에 대한 대비로 Nest.js와 Type-ORM을 공부해보기로 했다.
부스트캠프를 통해서 각 라이브러리, 모듈 등이 어떻게 동작하는지를 공부하고 직접 구현해보았다면,
이번엔 그걸 극한으로 이용하는 프로젝트를 만들 준비를 해보자는 생각이었다.
내 깃헙의 리포지토리를 보니, 예전에 자바스크립트도 모르는데 타입스크립트의 Nest.js를 공부하려다가 실패한 기록이 있었다
(어찌보면 당연한 것 같다. 불어를 쓸 줄 모르는데 불문학을 작성하는 기분이랄까...)
이걸 그대로 clone해 가져온 후, 기존 로직들을 전부 밀어버리고 과제로 나오는 내용들을 전부 직접 구현해보고 있었다.
확실히 큰 장점이 2개 있었다.
일단 자바스크립트를 알고, 타입스크립트를 아니 코드를 쓰기 쉬웠다
(이게 내가 제일 기대한 부분이다. 스프링은 자바를 아니까 쓰기 수월한 것 처럼, 네스트도 js/ts를 아니 쓰기 수월했다)
이 장점은 이어져, 내가 자바에서, JPA에서 쓰면서 좋았던 것들을 Nest.js에서 가져오고, js의 장점이 있으니 조금 더 좋은 프로젝트가 될 수 있다는 기대를 가지게 했다.
또한, 자바 때 스프링 시큐리티를 아무것도 모르고 쓰다가, 구글링으로 '그냥 이렇게 쓰는구나'하고 끝나는 경험이 없었다.
직접 만들어본 경험 덕인지, 이를 이해하려는 노력을 더욱 해볼 수 있었다.
(확실히 부스트캠프에서 그냥 노드js를 공부한다라고 하기엔, 그 이상의 무언가를 배우게 되었다)
두 번째로는, 아무래도 심적 여유인 것 같다.
Nest.js를 통한 나 스스로의 목적이 있다.
부스트캠프 과제에서 주는 모든 과제는 라이브러리 없이, 직접 코드로 만들고,
라이브러리를 극한으로 활용하는 Nest.js를 만들어봐야겠다는 생각이다.
학교에서 캡스톤 프로젝트를 할 때, 호돌맨의 요절복통 개발쇼를 보았다.
여기에서 호돌맨님의 말씀이 와닿았다.
맨날 해본걸로 하지말고,
자바로 해봤다면 Node.js로 해보고,
뷰를 써봤으면 리액트로도 해보세요
그래서 나의 Nest.js를 통한 목적을 제대로 잡고 열심히 달려봐야겠다.
부스트캠프...오모시로이..🔥(네다씹!!!)
그러면...twenty thousand...🔥
'개발공부 > 부스트캠프' 카테고리의 다른 글
[부스트캠프] 수료, 네트워킹, 그리고 앞으로....? (2) | 2023.12.24 |
---|---|
[부스트캠프] 7, 8주차 회고. 같이 쓰는데에는 이유가 있다! (1) | 2023.11.02 |
[부스트캠프] 5주차. 페어 프로그래밍과 추상화 (0) | 2023.10.15 |
[부스트캠프] 4주차 회고. 한 템포가 끝나고 (0) | 2023.09.28 |
[부스트캠프] 3주차 회고. 슬슬 즐기기 시작했다. (0) | 2023.09.19 |