https://ghcodenote.tistory.com/28
[디자인 패턴] 확장성에 용이한 코드 짜기
졸업 프로젝트에서 문장의 형태소를 분석해 특정 형태소가 들어가는지 checkList를 만드는 API를 구현해야 했다. 외부 API를 통해 형태소 List를 가져는 왔는데...제일 중요하게 생각한 것은 언제 어
ghcodenote.tistory.com
다음에 이어서 이어집니다.
1줄 요약) 문장의 형태소를 분석해 형태소의 List로 가지고 와 어떤 형태소가 있는지 checkList를 만들었다!
명사에는 일반 명사, 고유명사, 의존명사 들 다양한 명사들이 존재한다.(갑자기 분위기 중학교 국어 시간)
하지만 이것을 하나하나 다 따로 처리하면 만들어야 하는 메소드가 넘나…게 된다. (형태소 ↔ 클래스 1대1 교환)
따라서 나는 “명사”라는 하나의 단위로 처리해서 같은 처리하고자 한다.
어떻게 묶을까 enum 그룹 등을 찾으면서 고민하고 있는데 enum group에 관한 문서를 하나 발견했다.
https://techblog.woowahan.com/2527/
*빛테코 우리를 구원해줄 구원자
이를 바탕으로 enum의 상수에 List 형태의 해당하는 단어 리스트를 넣어줬습니다.
NOUN("명사", Arrays.asList("NNP", "NNG", "NNB")),
EF("종결어미", Arrays.asList("EF")),
VV("동사", Arrays.asList("VV")),
VA("형용사", Arrays.asList("VA")),
JKS("주격조사", Arrays.asList("JKS")),
NP("대명사", Arrays.asList("NP")),
NNB("의존 명사", Arrays.asList("NNB")),
EC("연결 어미", Arrays.asList("EC")),
MA("부사", Arrays.asList("MAG", "MAJ")),
JX_JC("보조사", Arrays.asList("JX", "JC")),
EMPTY("기타", Collections.EMPTY_LIST),
;
private final String title;
private final List<String> typeList;
- 이렇게 해당하는 형태소를 모아서 하나의 ENUM 값으로 묶었습니다.
public static MorphemeTypeEnum findByMorpheme(String code) {
return Arrays.stream(MorphemeTypeEnum.values())
.filter(type -> type.hasType(code))
.findAny()
.orElse(EMPTY);
}
private boolean hasType(String code) {
return typeList.contains(code);
}
code를 통해 가지고 온 형태소(ex. NNP)를 통해 MorphemeTypeEnum 값을 찾는 코드입니다. MorphemeTypeEnum.values()
를 하나씩 돌려서 찾도록 해 새로운 Enum 값이 들어온다고 해도 상수에 추가만 하면 돼 확장성에 용이합니다.
- Service
Map<MorphemeCheckEnum, Boolean> checkList = MorphemeCheckEnum.createDefaultCheckList();
for (MorphemeVO morpheme : morphemeVOS) {
String lemma = morpheme.lemma();
String type = morpheme.type();
MorphemeTypeEnum typeEnum = MorphemeTypeEnum.findByMorpheme(type);
if (MorphemeTypeEnum.EMPTY == typeEnum) {
continue;
}
}
'백엔드 개발 노트' 카테고리의 다른 글
[디자인 패턴] 팩토리 패턴을 이용한 OCP 지키는 코드 짜기 (0) | 2024.05.08 |
---|---|
[디자인 패턴] 확장성에 용이한 코드 짜기 (0) | 2024.05.08 |
S3를 이용한 사진 등록하기 (0) | 2023.12.19 |