디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[Java] 디자인 패턴: 행동-플루언트 인터페이스

마갤러(220.95) 2024.04.28 15:48:39
조회 80 추천 1 댓글 0

[!] 디자인 패턴 소개:

다른 이름: Fluent API, Method Chaining

1. 소개

플루언트 인터페이스 패턴은 메서드 체이닝을 통해 전반적인 설계를 진행하는 디자인 패턴임. 소프트웨어의 동작을 마치 산문을 읽는 것처럼 보이게 하여 가독성을 올리는 것이 주 목적임.

2. 메서드 체이닝

publicclass ChainingObject {public ChainingObject execute1(){// do somethingreturnthis;}public ChainingObject execute2(){// do somethingreturnthis;}public ChainingObject execute3(){// do somethingreturnthis;}}
publicclass ChainingExample {publicvoidchaining(){ ChainingObject object =new ChainingObject(); object.execute1().execute2().execute3();// method chaining}}

메서드 체이닝이란 메서드가 this를 반환하여, 위와 같이 메서드 뒤에 다른 메서드를 체인처럼 연결하는 기법을 말함. 보다시피 메서드가 ChainingObject를 반환하기 때문에 뒤에 Chaining Object의 다른 기능들을 실행할 수 있음.

3. 예시

publicclass MiniGameConfig {private MiniGameType type;private String id;private String name;public MiniGameConfig setType(MiniGameType type){this.type = type;returnthis;}public MiniGameConfig setId(String id){this.id = id;returnthis;}public MiniGameConfig setName(String name){this.name = name;returnthis;}public MiniGame build(){returnnew MiniGame(this);}}
publicclass MiniGame {private MiniGameConfig config;private final List<MiniGameTeam> teams =new ArrayList<>();publicMiniGame(MiniGameConfig config){this.config = config;}public MiniGame addTeam(MiniGameTeam team){ teams.add(team);returnthis;}public MiniGameTeam getTeam(String teamId){return teams.stream().filter(team -> team.getId().equals(teamId)).findFirst().orElse(nulll);}public MiniGame addPlayer(String teamId, MiniGamePlayer player){getTeam(teamId).addPlayer(player);returnthis;}publicvoidstart(){// do start logic}}
publicclass Application {publicstaticvoidmain(String[] args){ MiniGame game =new MiniGameConfig().setType(MiniGameType.TDM).setId("test_tdm").setName("Test TDM Game").build(); game.addTeam(new MiniGameTeam("RED")).addTeam(new MiniGameTeam("BLUE")).addPlayer("RED",new MiniGamePlayer("Red1")).addPlayer("RED",new MiniGamePlayer("Red2")).addPlayer("BLUE",new MiniGamePlayer("Blue1")).addPlayer("BLUE",new MiniGamePlayer("Blue2")).start();}}

Java Stream API, 빌더 패턴은 메서드 체이닝을 이용하는 대표적인 예시임. 이와 같이 플루언트 인터페이스 패턴은 여러 구현에서 광범위하게 적용될 수 있음.

4. 장점 및 단점

가독성이 올라감. 이런 이유로 API에 적용하기 적합함.

복잡한 객체를 단계별로 작동하게 할 수 있음. 또한 직관적이고 오류가 덜 발생하게 할 수 있음.

코드 상용구(Boilerplate)를 줄일 수 있음.

필수 메서드 호출을 누락하는 등 실수를 해도 컴파일 타임에 문제를 알아차리기 힘듬.

한줄로 쓸 경우 디버깅시 어디서 오류가 발생했는지 알기 어려움.

과도하게 사용하면 오히려 가독성을 떨어트릴 수 있음.

5. 참고 자료

https://en.wikipedia.org/wiki/Fluent_interface

https://java-design-patterns.com/patterns/fluentinterface/

https://ko.wikipedia.org/wiki/%ED%94%8C%EB%A3%A8%EC%96%B8%ED%8A%B8_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4

작성/수정 일자:2024.04.26

추천 비추천

1

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 경제관념 부족해서 돈 막 쓸 것 같은 스타는? 운영자 24/05/13 - -
AD 나혼렙 어라이즈 그랜드 론칭! 운영자 24/05/09 - -
공지 마인크래프트 갤러리 이용 안내 [65/1] 운영자 15.03.04 29402 72
87625 후추 지금 둥그레 단타에서 생일잔치캠방중 ㅇㅇ(118.218) 12:52 37 0
87624 이번 주 띵물의 숲 너무 기대되고~ ㅇㅇ(1.223) 12:46 22 0
87623 악어 모바일 게임이..? 마갤러(118.35) 12:31 36 0
87622 1.20.6 야생서버 할 사람 ㅇㅇ(223.39) 12:30 25 0
87621 기모찌대학교 조직도 [2024.05.13] Scowl(121.164) 12:30 34 0
87620 세이렌이 낚이는 조건이 있다고 했는데 계속 추측중 마갤러(211.236) 12:22 31 0
87619 마인크래프트 폰이랑 컴이랑 맵 자동연동 가능하냐 [2] 마갤러(211.222) 12:21 46 0
87618 마크로 뽑을수있는건 다뽑은거같은데 [2] ㅇㅇ(118.223) 12:20 62 0
87617 테라리아랑 마인크래프트 합쳐지면 재밌을거 같은데 [1] 마갤러(182.226) 12:15 52 0
87616 악놀2 월요일 서버 연장점검인가봐. [2] 마갤러(121.145) 12:07 61 0
87615 텀블러.. 배송시작..! [2] 마갤러(211.236) 12:06 36 0
87614 서버 들어가려면 모드폴더 어떻게 해야함? [2] ㅇㅇ(211.49) 12:06 54 0
87613 새벽에 악어 단타중 세이렌 떡밥일지는 모르겠지만 [1] 마갤러(125.133) 12:01 50 0
87612 대학생인데 늦잠자서 다음 강의 가야함 [1] 마갤러(218.236) 11:58 30 0
87611 오늘 하루도 기깔차게 스타투 마갤러(125.133) 11:35 27 0
87610 핑계고는 전설이다.. 마갤러(1.223) 11:34 47 0
87609 악놀은 안보지만 [2] ㅇㅇ(210.95) 11:27 43 0
87608 -타워형 포격 유닛 마갤러(118.44) 11:14 35 0
87606 마크 현실판 신호등 구현 (모드 X) ㅇㅇ(121.178) 10:20 45 0
87605 마인크래프트 pc에 관련해서 물어볼것이 있음! [1] 마갤러(220.76) 10:18 47 1
87604 아 이제 이런 거 못 보는 건가? LVMH FENDI(49.170) 09:17 41 0
87603 마인크래프트 pe 권한질문 ㅇㅇ(61.77) 08:09 87 0
87602 뜌따이겜 마크 바스트모핑 근황.....gif [6] 마갤러(49.142) 07:26 376 7
87601 슬슬 악놀에도 [2] ㅇㅇ(221.166) 07:14 108 0
87600 악놀분석) 5월 2주차 악어의 놀이터 특집! 인방분석 [4] 마갤러(61.75) 07:01 174 0
87599 마법핟교 우승소감 ㅇㅇ(118.42) 06:48 90 0
87598 밤새 모아둔 아스라이 쌓인 고운 마음도 다 가져가셔요 나무(61.77) 06:45 57 0
87597 야생서버 들어와서하자 ㅇㅇ(223.39) 06:27 30 0
87596 [WhiteList][1.20.4] 하바톤 마갤러(61.101) 05:57 153 0
87595 빈 땅 마갤러(121.168) 05:42 66 0
87594 야생서버는 대체로 오래 못 가는지 [4] 마갤러(121.168) 05:40 209 0
87593 ▪+과거의 나 자신에게 이 편지를 보낼게. [2] 서승민(61.82) 04:52 112 0
87592 체대생 여자 짤 피카츄만두갤로그로 이동합니다. 04:46 47 0
87591 시계를 볼때마다 4시44분이에요 ㅇㅇ(182.212) 04:44 59 0
87590 억까당한날 [8] 단테 DanteHelaim(61.82) 04:29 72 0
87589 편돌이식 마인크래프트 [1] 마갤러(222.234) 04:25 118 0
87588 악놀 왜케 재밌냐 마갤러(154.47) 04:10 39 1
87587 근대 애초에 마크 시작한게 ㅇㅇ(221.166) 03:50 63 1
87586 일부 유저들이 동시에 튕기는 현상 [2] ㅇㅇ(211.223) 03:48 110 0
87585 드래곤마크드포다스 비슷한 겜 몽땅 알려죠!! [1] 마갤러(49.142) 03:43 50 0
87584 짤녀 꼴리면 자러감 알렉스말랑뷰갤로그로 이동합니다. 03:34 95 0
87583 파카 마크는 루트가 정해져있음 [8] ㅇㅇ(211.223) 03:30 200 2
87582 핑맨 단타중 탈의 ㄷㄷㄷ 마갤러(49.142) 03:14 167 0
87581 마망호에서 열심히 카트 선로 연결하고 들은 소리 [1] 마갤러(175.195) 03:08 68 0
87580 내 개인적인 악놀2 생각 [6] 마갤러(221.166) 03:07 143 0
87579 스크립트 변수 저장 실패 마갤러(112.168) 03:05 73 0
87578 마크<<< 나름 어려운겜임 ㅇㅇ(14.42) 03:02 53 0
87577 스포너렉탓은 여기는 마크 좆도몰라 괜찮아급인데 ㅇㅇ(211.223) 02:29 65 0
87576 흠 마크 좀 친다는 청자들 하나같이 다 스포너 렉 영향 없다는데 [1] ㅇㅇ(112.168) 02:29 143 1
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2