프로그래밍

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

심심해서 짜봤엉 쳐머겅

 

이건 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
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180505 [컴퓨터] 인텔 그래픽 드라이버 최신화 인식 왜이따위임? 1 넌뭔데시비냐 0 1 시간 전 55
180504 [모바일] 안드로이드 카메라 어플중에 쓸만한거 뭐있음? 1 일째다이어트하는중 0 1 시간 전 22
180503 [컴퓨터] 집에서 투 컴퓨터 사용시 키보드 마우스 세팅 4 해물잠봉 0 2 시간 전 64
180502 [잡담] 동글 사려는데 싼거사도됨? 5 제로콜라는닥터페... 0 4 시간 전 84
180501 [컴퓨터] 가난개붕이 글카샀다 9 69746974 0 5 시간 전 157
180500 [컴퓨터] 로지텍 무선마우스가 g502x 이거 많이씀?? 9 울그락푸르락 1 5 시간 전 110
180499 [컴퓨터] DDR5는 렘오버한거 차이많이남? 15 창원토박이 0 7 시간 전 190
180498 [컴퓨터] 형들 제품키만 파는것들 써도 되는거야? 4 우루루옳지 0 7 시간 전 97
180497 [잡담] 시네빔 써본 개붕이 있어? 4 따뜻한젤라또 0 8 시간 전 45
180496 [컴퓨터] 다나와에서 컴터 하나 사려고하는데 6 바나나사탕 0 8 시간 전 58
180495 [잡담] 게이밍 노트북 중고 가성비 어때보임? 6 ST11223 0 9 시간 전 137
180494 [컴퓨터] 책상 인증 5 69746974 0 10 시간 전 153
180493 [컴퓨터] 프레임 고정하는 이유가 뭔가요? 5 우루루옳지 0 10 시간 전 160
180492 [모바일] 통신사에 공유기 교체해달라하면 해주나? 5 뱅갈고양이육성중 0 11 시간 전 136
180491 [모바일] 중고폰 선택장애 도와주세요 5 호래빙 0 11 시간 전 69
180490 [컴퓨터] 캐붕이 컴퓨터 어떠냐 9 Benetton 0 12 시간 전 157
180489 [컴퓨터] 형들 컴퓨터 파워가 문제일 가능성이 있을까요? 10 부터시작하는이세... 0 13 시간 전 111
180488 [컴퓨터] 윈도우 ㅅㅂ 왜이러냐 바이러스 관련 업데이트 7 정병장기입원 0 19 시간 전 192
180487 [컴퓨터] 컴맹 데스크탑 견적하고 몇 가지 질문들 가능합니까? 11 Cat드립미어캣 0 19 시간 전 94
180486 [컴퓨터] SSD 파티션 쪼갰던거 하나로 합치는거 가능함? 5 기초플러스 0 22 시간 전 223