프로그래밍

네카라쿠배 다니는 킹갓 주니어님 보십셔-

심심해서 짜봤엉 쳐머겅

 

이건 legacy style로 짜는게 더 나은게 아니라


느그들이 functional programming을 존나 못해서 짜낸 코드 수준이 그따위인거야 :-)

 

내가 남들 C++ 할 시간에 Java 해서 그수준이면 솔직히 어디가서 쪽팔릴까봐 질문은 못받을 것 같아 ㅎㅎ

 

열공행

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import org.jetbrains.annotations.NotNull;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import java.util.function.Function;
 
public class A {
 
    public static void main(String[] args) {
        String nickname = "FUCK_YOU";
        Map profile = new HashMap();
        profile.put("nickname", nickname);
        Map kakaoAccount = new HashMap();
        kakaoAccount.put("profile", profile);
        Map map = new HashMap();
        map.put("kakao_account", kakaoAccount);
        Object object = map;
 
        Optional<String> a = Optional.ofNullable(object)
                .flatMap(A::tryCastToMap)
                .map(mapGetter("kakao_account"))
                .flatMap(A::tryCastToMap)
                .map(mapGetter("profile"))
                .flatMap(A::tryCastToMap)
                .map(mapGetter("nickname"))
                .flatMap(A::tryCastToString);
 
        System.out.println(a.get());
    }
 
    @NotNull
    private static Function<super Map, ?> mapGetter(@NotNull Object key) {
        return map -> map.get(key);
    }
 
    @NotNull
    private static Optional<String> tryCastToString(@NotNull Object object) {
        return tryCast(object, String.class);
    }
 
    @NotNull
    private static Optional<Map> tryCastToMap(@NotNull Object object) {
        return tryCast(object, Map.class);
    }
 
    @NotNull
    private static <T> Optional<T> tryCast(@NotNull Object object, @NotNull Class<T> clazz) {
        if (clazz.isInstance(object)) return Optional.of((T) object);
        else return Optional.empty();
    }
 
}

 

 

cs

 

 

29개의 댓글

2020.09.30

??

0
2020.09.30
@앙호호앙잉

https://www.dogdrip.net/index.php?mid=computer&category=180739712&document_srl=282396930&page=1

요런 친구가 있길래 야밤에 심심해서 그만 ㅎㅎ

0
2020.09.30

컴공 사람들 참 피곤하게 사네

3
2020.09.30

코틀린놔두고 굳이 자바로 이렇게 비트는이유는 뭐임? 언어 자체가 함수를 퍼스트클래스로 안다루는데 뭐하러 자바로 함수지향 구현하겠다고 어거지로 하는거야?

0
2020.09.30
@미제승냥이

평소에 코틀린으로 짜 ㅇㅇ

저 코드를 올린 친구가 자바로 짰길래 ㅇㅇ

0
2020.09.30

+내가 본 금융권중에 jdk 1.4쓰는경우도 있었는데 그런것들 어떻게 커버하려고?

0
2020.09.30
@미제승냥이

1.4는 그냥 traditional하게 짜야지뭐

1.7에서 못올리는 상황이면 코틀린이 답이 될거고

1.8 이상이면 traditional하게 짤 이유가 없음

0
2020.09.30
@왈도식개발

속도.. 메소드핸들이랑 instanceof가 생각보다 비용이 큼

 

근데 뭐 굳이 자바로 억지로 비튼이유가 있다고 하니까 더 얘기는 안함

0
2020.09.30
@미제승냥이

억지로 비틀었다기보단 ㅋㅋㅋㅋㅋ 원글이 java 1.8을 전제로 하니까 개선 코드도 같은 환경으로 짠거지뭐

0
2020.09.30
@미제승냥이

(object as? Map)?.get("kakao_account")

?.let { it as? Map }?.get("profile")

?.let { it as? Map }?.get("nickname") as? String

 

대강 이런식이 나오겠지? IDE에서 짠게 아니라 제대로 안돌아갈 수 있음

0
2020.09.30
@왈도식개발

ㅇㅇㅇㅇ 내가한얘기가 이거였어

 

왜 둘다 굳이 자바에서 저러는지가 궁금했던거임ㅋㅋ

0
2020.09.30
@미제승냥이

이런 경우에선 상대방 환경에 맞춰서 제시하는게 맞으니까 ㅋㅋㅋㅋ

0
2020.09.30
@미제승냥이

그리고 원글 코드에서 Optional을 썼는데 java Optional이 생긴건 1.8 이후부터임 ㅇㅇ

그래서 개선 코드도 1.8 이상을 전제로 작성했음

0
2020.09.30

방금 원글 보고왔는데 결국 캐스팅만 걍 함수로 뺀거아님?

0
2020.09.30
@미제승냥이

원글 코드가 드러운것도 filter에서 type matching하고 map에서 type casting & populate를 하기 때문인데, 핵심을 못찌르고 optional chaining의 단점이라 주장하는게 잘못된걸 보여주고 싶어서 ㅇㅇ

 

원글 주장 : Optional chaining이 비효율적이어서 traditional method로 접근하는게 더 나을 때가 있음

내 주장 : Optional chaining이 비효율적으로 보여지는건 니가 못짜서임

0
2020.09.30

근데 걍

try{

return obj.get("kakao_account").get("profile").getString("nickname");

}catch(){return null;}

 

이거놔두고 굳이 뭐하러 저렇게해?

0
2020.09.30
@미제승냥이

성능을 논하면서 exception 생성되는 데서 생기는 성능 저하는 생각하지 않으시는군요

0
2020.09.30
@왈도식개발

ㄴㄴ익셉션 jvm쪽에서 보면 생각보다 성능저하 없어

 

왜냐면 jvm에서 인스트럭션 실행할때 java/lang으로 시작하는 시스템클래스는 거기서 익셉션테이블로 바로 점프 가능하게 구현돼있음

0
2020.09.30
@미제승냥이

저 경우에 NPE가 뜨면 stacktrace filling에서 성능 저하가 있을텐데?

0
2020.09.30
@왈도식개발

콜스택은 언제나 항상 차있어

 

jvm쪽보면

 

if(exceptionOccured()) {

goto catch;

}

 

매 옵코드마다 이런거 반복함

 

익셉션 코스트는 branch보다 약간 더 높은수준이야

 

그에비해서 메소드핸들은 .class의 어트리뷰트테이블 조회해서 거기로 가는과정이 필요하고 바로 invoke 못시킴..

0
2020.09.30
@미제승냥이

오우 하나 배웠다 내 지식이 너무 옛것이었네

JVM exception 성능이 많이 올라갔네 게다가 JIT 타면 거의 C++ 스러운 구조로 가는 것 같구마잉

stacktrace filling에서 성능 저하를 얘기한건 memcpy 얘기한건데 하긴 사실 요즘 memcpy보단 method handle이 더느리겠다

0
2020.09.30
@미제승냥이

방금 다시 IDEA에 떄려박고 바이트코드 봤는데

invokedynamic에서 Bootstrap Method Table inquiry가 발생하는거 생각해보니까 선생님 말씀이 아주 정확하십니다 ㄱㅅㄱㅅ

0
2020.09.30
@왈도식개발

요점은 니가 코틀린코드로 올린

 

(object as? Map)?.get("kakao_account")

 

?.let { it as? Map }?.get("profile")

 

?.let { it as? Map }?.get("nickname") as? String

 

이거처럼 자바에는 자바스러운방법이 있는데 왜 자바에서 자꾸 코틀린같은거 따라가려고하는지가 궁금했던거임

 

가독성이 올라가는것도 아니고 빠른것도 아니고 애초에 메소드를 퍼스트클래스로 다루질 않아서 진짜 함수지향이 불가능한언어인데 왜 굳이 자바에서 그러는지

 

근데 뭐 환경에맞춰서 구현해준거라하니까 그러려니함

0
2020.09.30
@미제승냥이

Java8에서 function as first class가 안되어도 functional programming이 아에 불가능한건 아니지

Optional chaining은 결국 코드를 monadic하게 짜겠다는거고 monad를 다룸에 있어서 functional하게 짜지 않으니까 코드가 더 길어지고 필요 이상의 캐스팅이 필요해지는걸 지적하는거임

0
2020.09.30
@미제승냥이

즉 optional chaining을 제대로 쓰고 나서 traditional way를 better option으로 제시하면 모르겠는데

Optional chaining을 제대로 못써놓고 traditional way를 얘기하면서 으스대시는게 넘나 멋져보여서 그런거임 ㅎㅎ

0
2020.09.30
@미제승냥이

성능을 생각하지 않더라도

일단 (String) ((Map) ((Map) (Map obj).get("kakao_account")).get("profile")).get("nickname") 식으로 캐스팅 해줘야될거고

그래도 되도록 중간 단계가 보이게 짜주는게 좋음 ㅇㅇ 너무 암묵적으로만 짜면 보는 사람 입장에서 추론하는데 코스트가 늘어나니까

0
2020.09.30

뭔소린지는 모르겠지만

일단 스샷 찍어갑니다

 

0
2020.09.30

킹갓 js,ts로 정신건강을 챙기자

const nickname = object?.profile?.nickname

0
2020.09.30
@잠적자

미리 타입이 잡혀있음 코틀린도 똑같이 가능 ㅇㅇ

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180025 [컴퓨터] 이거 모니터 고장난건가 EPS 0 1 시간 전 26
180024 [컴퓨터] 수냉쿨러 없었으면 덕트 쪽으로 컴터개발이 이루어 졋을듯 2 침혜랄 0 2 시간 전 63
180023 [컴퓨터] 요즘 보드들은 wifi가 신기하게 나오네 3 교미짝짓기 0 2 시간 전 120
180022 [잡담] 맥북 병은 사야 치료됨 8 장난없는사람 0 4 시간 전 200
180021 [컴퓨터] 모니터 이 둘 중이 뭐가 더 나음? 6 XDLOL 0 4 시간 전 91
180020 [컴퓨터] 모니터질문 or 추천좀용 10 20202021 0 6 시간 전 84
180019 [잡담] AI 요약 개웃기네 4 아도크 1 6 시간 전 242
180018 [컴퓨터] 모니터 사야하는데 11 XDLOL 0 7 시간 전 98
180017 [잡담] 크로미움 브라우저들 엔비디아 화면 깨지는 글리치 더 심해지네 1 ye 1 7 시간 전 99
180016 [잡담] s23 OneUI 6.1 업뎃 떴다 2 아도크 0 8 시간 전 277
180015 [컴퓨터] 영상편집용으로 프레데터 헬리오스 어떳슴까?? 2 으라야야 0 9 시간 전 77
180014 [잡담] 최근에 유튭프리미엄 우회 해본사람? 14 itx 0 9 시간 전 275
180013 [컴퓨터] 그래픽카드 하나 선물 해줘야 할거같은데 추천좀 12 침혜랄 0 10 시간 전 172
180012 [컴퓨터] g304 왤케 비쌈....ㄷ 16 스카이락 1 10 시간 전 244
180011 [잡담] 독거미 저건 뭐 어떻게되먹은거냐 4 쌉가능충 0 10 시간 전 268
180010 [잡담] 헤드셋 질문 4 하이람쥐썬더 0 10 시간 전 46
180009 [견적] 무선 이어폰 헤드셋 추천좀요 9 프갤갤갤갤 0 11 시간 전 84
180008 [모바일] 테블릿 키보드 미인식 어떻게 해야할까요?.. 4 匠人 0 11 시간 전 56
180007 [잡담] 타오직구 레이니왔다 11 짤랑이짤랑 0 11 시간 전 217
180006 [잡담] 혹시 드렁크디어 a75 쓰시는분 있으신가요? 3 백형 0 12 시간 전 49