반응형

스펀지밥 (사실 스폰지송, 스펀지송으로 잘못 외우고 있었지만) 전시회가 용산 아이파크몰에서 열린다하여 방문하였다.


스폰지밥 전시회는 익히 들었던것처럼 볼것도 없고 사진 찍는 줄이 입장 줄보다 몇배 길고 볼것도 없다라는게 중론이므로 시간과 돈이 많다면 추천하지만 그렇지 않다면 스폰지밥 카페를 추천한다.


스폰지밥 30% 할인 받는법은 전시회장 윗층에서 식사를 하고 영수증을 제출하면 된다.
원래 얼리예약을 하면 할인을 해주지만 이미 얼리예약 기간은 전시가 시작되며 종료되었기 때문에 현시점에선 위 방법만이 용산 아이파크몰 스폰지밥 할인을 받는 방법 중 유일한 방법이다.
물론 단체라던가 그런 일반인이 접근 불가능한 경우를 제외하고 말이다.

이제부턴 스펀지밥 카페 팝버블 이용 핵심 팁
일단 팝퍼블은 오픈런을 해야 한다.
안그러면 1시간 이상 대기해야 한다.
참고로 우린 오픈런 후 바로 입장을 하였지만 혹시 몰라 그 와중에 대기를 걸었는데 대기번호가 3번이었음에도 불구하고 1시간 넘어서 연락이 왔다.
만약 오픈런을 성공 못했다면 아래처럼 대기 번호를 받아야하는데 보이는가? 저 무시무시한 대기시간 125분 39팀!

그런데 입장을 했다해도 또다른 난관이 있다.
바로 주문줄이다.
앞 대기팀이 많아야 7~8팀이었는데 주문만 하는데 10분 정도 걸리는것 같다.
그런데 주문을 하면 또 끝나냐? 아니다 음식이 나오기까지 또 오래 걸린다.

그럼 하염없이 대기만 할 것인가?
아니다.
혼자 방문한게 아니라면 한명은 줄을 서고 주문을 하고 다른 일행은 포토존을 이용하면 된다.
3천원에 얼굴을 프라스틱 ID카드에 인쇄하는 프로그램이 존재한다.
아이폰 이용자들은 빡치고 싶지 않으면 안드로이드 유저를 데리고 가길 바란다.
사진을 기계로 전송해야 하는데 아이폰은 안되더라.
그리고 주문까지 성공하면 이제 기다리면 되는데 추가 주문은 또 안 받는다.
그러니 주문할 때 최대한 먹을만큼 주문해야 한다.

메뉴는 대충 이렇다.
다들 햄버거랑 팝콘 그리고 마카롱은 많이 먹는것 같다.
음료는 망고였나? 그건 품절이라더라.
수박은 그럭저럭 먹을만 하고 퍼런 음료는 정말 개노맛이다. 시키지 말자. 2023년 낭비한 돈 리스트에서 1등 차지할 맛이다.

마카롱은 괜찮다.
존귀염 뽀찍이다.

사실 난 맛보지 못했다.
그런데 애가 잘 먹더라.

끝으로 SNS에 #스폰지밥, #팝퍼블 #스폰지밥카페 라고 태그 남기고 직원 보여주면 투명 포토카드 랜덤으로 준다.
팝퍼블인데 팝버블이라고 태그 잘못 남기면 알바가 지적한다. 수정해야 한다. 알짤없다.

정말 끝으로 네이버 스폰지밥 팝퍼블 정보를 보면 10시 오픈이라고 되어 있는데 10시 30분 부터 입장 가능하다.
아이파크몰 자체가 10시 30분에 문을 열기 때문이다.
알바에게 말해줬지만 듣는둥 마는둥 하더라.
내 알바 아니다 식의 마인드를 시전하는 알바를 개선시키는건 사치일것 같아 참았다.

정말 정말 끝으로 도라에몽 만화책을 무료로 빌려 볼 수 있다.
다른 만화책도 10여권 존재했다.

요 사진은 1층인가 가면 유니클로 있는 곳에 따로 포토존 1곳이 존재한다.
전시회에서 돈 내고 스트레스 받느니 차라리 이게 더 낫다.

반응형
Posted by Hippalus
,

반응형

chatgpt에도 openapi가 존재한다.

ChatGPT API사용법은 chatgpt에게 물어보면 잘 대답해준다.
이런 소스인데 기본적으론 python으로 답을 해주고 javascript로 소스 샘플을 짜달라면 node.js로 보내온다.
하지만 쌩 javascript도 가능하니 node.js가 아닌 javascript로만 답을 해달라고 하자.
그럼 이런 답을 얻을 수 있다.

<!DOCTYPE html>
<html>
<head>
  <title>GPT-3.5 Turbo Chat</title>
</head>
<body>
  <div>
    <label for="userInput">질문:</label>
    <input type="text" id="userInput" />
    <button onclick="getChatResponse()">답변 받기</button>
  </div>
  <div>
    <strong>ChatGPT 답변:</strong>
    <p id="response"></p>
  </div>

  <script>
    async function getChatResponse() {
      const userInput = document.getElementById("userInput").value;
      const apiUrl = "https://api.openai.com/v1/completions"; // OpenAI API URL
      const apiKey = "내가 받은 api key"

      const requestBody = {
        model: "gpt-3.5-turbo",
        messages: [
          {
            role: "user",
            content: userInput,
          },
        ],
      };

      try {
        const response = await fetch(apiUrl, {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
            Authorization: `Bearer ${apiKey}`,
          },
          body: JSON.stringify(requestBody),
        });

        const data = await response.json();
        var strResult;

        if (data.hasOwnProperty("error")) { // error 속성이 존재하는 경우
            strResult = data.error.message;
        } else if (data.hasOwnProperty("choices")) { // choices 속성이 존재하는 경우
            strResult = data.choices[0].message.content;
        } else {    // 그 외의 경우
            strResult = "Unknown response format.";
        }

        document.getElementById("response").innerText = `ChatGPT: ${strResult}`;
      } catch (error) {
        console.error("Error:", error.message);
        document.getElementById("response").innerText = "Error occurred.";
      }
    }
  </script>
</body>
</html>

대충 chatgpt API 사이트에 보니 모델을 지정하고 API키만 입력하고 질문입력해서 보내면 답을 주는 매우 간단한 구조다.
API구조는 chat gpt버전에 따라 다르다. 
구조가 저러하다 정도만 이해하고 나머진 규격에 맞게 requestBody를 구성하면 되겠다.


그러면 이제 API KEY를 얻어보자.
API KEY를 얻기 위해선 아래 페이지에 가서 신청하면 받을 수 있다.

https://platform.openai.com/account/api-keys

 

OpenAI Platform

Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform.

platform.openai.com

본격적인 개발을 진행하기 전 postman이란 프로그램을 이용하면 미리 테스트가 가능하니 postman을 다운로드 받자.
https://www.postman.com/downloads/

 

Download Postman | Get Started for Free

Try Postman for free! Join 25 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.

www.postman.com

설치까지 다 했다면 실행 후 호출할 주소창에 https://api.openai.com/v1/completions를입력하고 호출 방법은 POST를 선택한다.


CHAT GPT OPEN API는 Bearer 인증방식을 취하고 있는데 
이 설정방법을 소개하려 한다.
Authorization탭으로 이동한다.
그리고 Type에서 BearerToken을 선택하고 Token에 아까 받아온 api key를 입력하면 된다.   

그다음으론 전송할 데이터를 입력해야 하는데 소스를 보면 json형식이니 모델과 메세지를 보내야 하는데 Body로 이동해 raw라디오 버튼을 선택하고 아래처럼 json을 입력하면 된다.

{
    "model""gpt-3.5-turbo",
    "messages": [
        {
            "role""user",
            "content""Hello!"
        }
    ]
}

이제 Send를 눌러 결과를 확인해보자.

API문서에 따르면 이런 규격의 response를 보게 될 것 같다.(정확하진 않다.)
{
   "id":"chatcmpl-abc123",
   "object":"chat.completion",
   "created":1677858242,
   "model":"gpt-3.5-turbo-0301",
   "usage":{
      "prompt_tokens":13,
      "completion_tokens":7,
      "total_tokens":20
   },
   "choices":[
      {
         "message":{
            "role":"assistant",
            "content":"\n\nThis is a test!"
         },
         "finish_reason":"stop",
         "index":0
      }
   ]
}

하지만 아래 같은 결과를 확인할 수 있다.

{
    "error": {
        "message""You exceeded your current quota, please check your plan and billing details.",
        "type""insufficient_quota",
        "param"null,
        "code""insufficient_quota"
    }
}

돈 내란다. -_-

이상하다.
chat gpt 사이트에는 분명 이렇게 5딸라까지 호출 여유가 있는데 쿼터를 오버했다니....

자세히보니 Expires가 2023년 7월 1일까지라 그런것 같다.
오늘은 8월이다.

오호라 아이디를 그럼 새로 파서 API KEY를 신청하면 5딸라 받아 테스트 가능하겠네?
신나게 아이디를 새로 파보니 그새 또 뭔가 달라졌나보다 -_-

예전에 생성했던 계정은 만료 5딸라가 보이지만 오늘 새로 생성한 chatgpt 계정은 그른그 읎다.
그냥 set up a paid account 답정이다.
역시 m$인가?

검색해보니 예전엔 18딸라까지 무료 지원을 했었는데 그마저도 5딸라로 개악된듯하고
이젠 그마저도 지원 안하나보다.

카드 정보 입력하기 껄끄러워 여기까지만 진행해야겠다.

반응형
Posted by Hippalus
,

반응형

연령대별 정상 혈압 구간이 존재한다.
혈압은 심장이 수축하고 이완하는 과정에서 동맥 벽에 가하는 압력을 의미하는데 혈압은 수축기 혈압(Systolic Blood Pressure, SBP)과 이완기 혈압(Diastolic Blood Pressure, DBP)으로 나뉜다.
이는 mmHg(밀리미터 수은柱)로 측정된다.

일반적으로 성인들에게 적용되는 혈압 기준은 다음과 같다.

정상 혈압 구간:

수축기 혈압(SBP): 90 ~ 120 mmHg
이완기 혈압(DBP): 60 ~ 80 mmHg

전체적인 평가:
정상 혈압: SBP < 120 mmHg이고, DBP < 80 mmHg
고혈압 전단계: SBP 120-129 mmHg이고, DBP < 80 mmHg
고혈압 1단계: SBP 130-139 mmHg 또는 DBP 80-89 mmHg
고혈압 2단계: SBP ≥ 140 mmHg 또는 DBP ≥ 90 mmHg
고혈압 위험: SBP ≥ 180 mmHg 또는 DBP ≥ 120 mmHg (의료적 긴급 상태)
하지만 연령에 따라 정상 혈압의 범위는 조금씩 다를 수 있는데 이는 일반적으로 나이가 들면서 혈압이 약간 상승하는 경향이 있기 때문이다.

따라서 연령대별 혈압 차이가 존재한다.

이러한 혈압 기준은 보건 기관과 학회에서 연구를 통해 수집한 대규모의 데이터와 임상 연구를 기반으로 하고 있다.
정상적인 혈압 범위는 개인의 건강 상태를 평가하고 고혈압 또는 저혈압과 같은 혈압 이상을 조기에 발견하여 적절한 조치를 취하기 위해 중요하다.

주의할 점은 개인의 건강 상태에 따라 정상 범위가 다를 수 있다는 점, 혈압은 하루에도 변동이 있을 수 있으며, 정상 범위를 넘어선다고 반드시 질병이 있다는 의미는 아니다.
따라서 혈압 측정이나 혈압 상태에 대한 평가는 의료 전문가와 상담하여 정확한 판단을 받는 것이 좋다.

다음은 20대부터 70대까지의 정상 혈압 구간

20대:
수축기 혈압(SBP): 90 ~ 120 mmHg
이완기 혈압(DBP): 60 ~ 80 mmHg

30대:
수축기 혈압(SBP): 90 ~ 120 mmHg
이완기 혈압(DBP): 60 ~ 80 mmHg

40대:
수축기 혈압(SBP): 90 ~ 130 mmHg
이완기 혈압(DBP): 60 ~ 85 mmHg

50대:
수축기 혈압(SBP): 90 ~ 130 mmHg
이완기 혈압(DBP): 60 ~ 85 mmHg

60대 이상:
수축기 혈압(SBP): 90 ~ 140 mmHg
이완기 혈압(DBP): 60 ~ 90 mmHg

이러한 혈압 범위는 일반적인 기준이며, 개인별 차이가 있을 수 있다.
따라서 혈압을 평가하거나 이상 여부를 판단하기 위해서는 주기적인 혈압 측정과 의료 전문가와의 상담이 필요하다.
또한, 고령자의 경우 혈압 변동이 더 크기 때문에 주기적인 건강 체크가 중요하며, 혈압의 변화나 다른 증상이 있다면 즉시 의료 전문가와 상담하여야 한다.

반응형
Posted by Hippalus
,

반응형

내돈내산 노형슈퍼마켓
미리 별점 주면 별5개 중 ★★★★★★ 6개다 ㅎ

이번 여행의 마지막 관광지로 선택한 노형수퍼마켙
대충 빛가지고 장난질치는 관람시설이란 정도 알고 방문하였다.
올초 겨울에도 빛관광지를 방문한 경험이 있었던지라 사실 크게 기대 안하고 방문하였다.

그런데 말이다.
이게 참 기획자의 의도에 제대로 한 방 먹은 느낌이다.

티켓팅하고 계단을 통해 입구로 입장하면 비교적 좁은 공간에서 대기해야 하는데
여기가 사람을 미치게 만드는 공간이다.
모든 색을 무채색으로 탈색시켜 회색 방안에 과거 물품들이 전시된 공간인데
대충 특정 빌런인지 외계세력에게서인지 빛을 빼앗긴 컨셉같은 공간이었다.
색이 있는 옷을 입고 사진 촬영을 하면 완전 잘 나온다.

잠시 대기하고 있노라면 라디오에 빛이 비춰지며 색을 빼앗겼고 어쩌고 안내멘트가 나오고 이윽고 본격적인 관람장소로 이동하게 된다.
들어서면 상당히 넓은 3층 공간으로 들어서게 되고 그 아래엔 이렇게 찬란한 빛의 예술이 음악과 함께 어우러짐을 감상할 수 있다.

앞서 설명한 무채색 공간 때문인지 색이 고맙게 느껴지기까지 한다.

일행 때문에 끝까지 보고 나오진 못했지만 꽤 신경을 많이 쓴 전시회장이었다란 느낌이 전해져왔다.

노형동에 있어 노형수퍼마켙인것 같다.
글 작성하는 시점까지 슈퍼마켙, 슈퍼마켓 인줄 알았다는

주차장도 넓어 주차걱정 안해도 되는 수준이었고 꽤나 만족스러운 시설이었다.
입구와 출구 공간엔 기념품을 팔고 있으니 마지막 코스에 넣어 비행기 타러 가기 전에 기념품도 사고 관람도 하는 코스로 짜면 꽤 괜찮은 여행 경로가 될 것이다.

재방문 의사도 있다.

반응형
Posted by Hippalus
,

반응형

요점정리
외관은 그럴싸 하나 시설이 좀 낡았다.
유료조식은 한번 먹을만하다. (두번 이상은 비추)
뷰는 밭뷰라지만 괜찮았다.
주차장 주차라인이 너무 좁다. 화장실도 너무 좁다.

제 점수는요
10점 만점에 7.5점
별점은 ★★★☆

제주도 신화월드를 가고자 하였으나 패밀리룸이 만실이라 신화월드 지근거리에 위치한 제주항공우주호텔을 아고다를 통해 비교적 저렴하게 예약하였다.
1박당 8만원대였고 기준 숙박인원은 3인이었으나 추가 침구류를 1회 납부하는 조건으로 성인3인에 초등학생1명 이렇게 총 4명이서 묵을 수 있었다.
내부 시설은 딱히 다양할게 없이 CU편의점과 로비에 차를 마시거나 음식 취식이 가능한 꽤 많은 수의 식탁과 의자
그리고 조식이 나오는 식당 정도였다.
CU편의점은 밤 10시 이후엔 무인으로 운영되는것 같았다.(무인 판매시간대엔 술 판매 X)

제주 항공 우주 호텔의 장점
객실이 넓어서 답답하지 않다.
신화월드에 비해서 1.7배? 주관적 평가라 확실하지 않지만 매우 넓어 좋다.
인근 관광지에서 매우 가깝다.
녹차밭과 녹차로 유명한 카페인 오설록을 걸어서 갈 수 있고
이름처럼 항공우주박물관은 기어서 갈 수 있고
제주 신화월드까진 차로 5~10분이면 쌉가능하다.
그리고 한적하이 뭐 나름 운치있고 괜찮다.
아래 사진은 객실에서 바라본 숲뷰인데 저 멀리 삼방산도 구름에 가려진채로 예술적으로 보이길래 담아봤다.

요건 호텔 로비에서 바깥을 바라보며 찍은 사진인데 뭐 괜츈하다.

여느 호텔처럼 곡선처리된 입구와 비를 피할 수 있는 공간도 뭐 괜츈괜츈

로비에서 객실로 이동할 때 DP되어 있는 미술작품과 의자들도 나름 신경 써놨다.

로비 우측에 위치한 CU편의점과 아까 말한 취식이 가능해 보이는 공간이 1시 방향이 있어 편리하다.

그리고 인당 1병씩 생수와 각종 차와 커피 그리고 치약과 칫솔이 매일 제공되는점은 매우 바람직하다.
신화월드는 칫솔 안 준다.


여기까진 꽤 양호하고 긍정적인 평가라면 아래부턴 점수 깎아 먹는 단점이다.
일단 객실이 너무 어둡다.
사진을 그냥 찍어보면 이보다 훨씬 밝게 나와서 인위적으로 좀 어둡게 촬영을 했다.
직접 객실에서 불 켜놓으면 저 조명이 어찌나 어둡던지 좀 암울한 기운이 느껴진다.
그리고 화장실이 너무 좁다.
변기에 앉을 때 조금 과장하면 곡예하며 앉아야 한다.
반면 샤워실은 화장실과 분리되어 있는데 이건 또 샤워기가 2개나 설치되어 있어 불필요하게 넓다고 해야 할지

그리고 주차장 주차라인이 좀 좁다.
쉬러와서 스트레스 받는다.


조식이 1만원대 중반인데 좀 빈약하다.
첫날 조식은 그래도 소세지도 나오고 만두도 나와서 좀 먹을만 했는데 둘쨋날은 기억에 남을만한 음식이 없었다.
조식은 2F로비에서 직원에게 호수를 말하고 티켓을 구매 후 1F 식당으로 가서 티켓 제출하고 먹으면 된다.
조식 개장시간은 아침 7시부터라 부지런하게 움직일 때 이용하기 권장된다.

끝으로 유아나 초딩 동반해서 침대에서 잘 땐 로비에 침대 가드 부탁하면 갖다 준다.
로비 직원들 친절하다.
이상 내돈내산 제주항공 우주 호텔 리뷰 끝

반응형
Posted by Hippalus
,

반응형

코로나로 인해 제주도가 관광지로 각광을 받은지도 2~3년이 지났고 하늘길도 열려 이젠 다들 일본과 동남아를 많이들 간다한다.
나역시 제주도를 코로나 기간 동안 3회 방문한듯 싶다.

이번에 방문한 신화월드는 중공인을 대상으로 만들어진 대규모 리조트인데 코로나와 사스의 여파로 중공인들보단 한국인들이 많이 찾고 있는듯 하다.

일단 신화월드의 워터파크를 이용하려면 투숙객은 일부 상급 투숙객에게 무료로 이용 가능하지만 투숙하지 않는 일반 관광객들은 네이버나 지마켓에서 티켓을 할인받아 가는게 그나마 저렴하다.
이번 2023년 여름엔 지마켓에서 여행 행사를 진행하여 비교적 저렴한 가격인 인당 35,000원에 다녀왔다.

워터파크 운영시간은 10시부터 저녁 8시까지 총 10시간이다.
개장시간에 맞춰 방문하였는데 사진 촬영 시간이 9시 45분경이었는데 비교적 한산한편이었다.

신화 월드 워터파크는 입장시 소지품 검사를 한다.
김밥이나 다른 외부 음식이 들어오는걸 막기 위함인데 건물 밖에서 일단 줄을 서서 입장하면 이렇게 내부에서 또 짐검사로 시간을 소비해야 한다.

참고로 내부에서 파는 음식 가격은 터무니없이 비싸다.
미역국이 15,000원인가 했던것 같고 오뎅 몇개 들은게 7,000원 떡볶이가 7,000원 이런식이다.
떡볶이는 그래도 맛은 있었다.
떡볶이를 별로 좋아하지 않는 나이기에 내가 맛있다면 맛있는거다. ㅎ

썬베드가 35,000원이고 저런 고급진 베드는 더 비싸다.
방갈로 같은건 몇십만원이나 한다.
유료에 가격도 비싸서 그런지 썬베드는 많이 여유가 있어보였다.
케리비안베이처럼 경쟁하지 않아도 충분히 이용 가능한 수량과 이용률을 보였다.

아래 사진에서 보이는 노란 시설은 초등학생이나 그 이하 어린이들을 위한 시설인데 방방처럼 물과 함께 뛰어 노는 시설이다.

이밖에 건물 내부와 외부에 각각 유수풀, 워터슬라이드, 놀이터, 온수풀 등 다양한 시설이 있다.
하지만 신화월드워터파크에서 가장 마음에 든 시설은 샤워시설이었다.
캐리비안베이와 비교해봐도 다른 워터파크랑 비교해봐도 이상하게 편하다.
리조트 시설이라 그런가

끝으로 팔찌형태의 코인충전을 할 수 있는데 그냥 신용카드 들고 들어가는게 최고다.
괜히 코인충전해서 귀찮게 이용하지 말자

반응형
Posted by Hippalus
,

반응형

//먼저 이런 파일명이 존재한다 치자 일부러 .을 파일명에도 넣었다.
var strData = "동해물과. 백두산이.txt"

// 파일명과 확장자를 .으로 분리한다.
if let lastDotIndex = strData.lastIndex(of: ".") {
    let fileNameWithoutExtension = String(strData[strData.startIndex..<lastDotIndex])
    print(fileNameWithoutExtension) // 출력: "동해물과. 백두산이"
} else {
    print("확장자가 없는 파일명입니다.")
}

// 다음은 원하는 자릿수부터 자릿수까지 추출한다.
// 1번째 글자부터 (0이면 처음임) 8번째 자리까지 추출한다.
let startIndex = strData.index(strData.startIndex, offsetBy: 1)
let endIndex = strData.index(strData.startIndex, offsetBy: 3)

let extractedSubstring = strData[startIndex..<endIndex]

print(extractedSubstring) // 해물

반응형
Posted by Hippalus
,

반응형

간단히 사람배열과 그 사람의 보유금액배열을 스위프트로 생성해 보겠다.
사람배열은 문자열형, 보유금액배열은 Int형이다.

var arrPerson:[String] = []
var arrMoney:[Int] = []

// 한명씩 append시키고
arrPerson.append("홍길동")
arrPerson.append("고길동")
arrPerson.append("둘리")

//순서대로 보유금액을 append시킨다.
arrMoney.append(10000000)
arrMoney.append(30000000)
arrMoney.append(0)

//이제 dictionary를 선언한다. key, value는 String,Int형이다. key에는 이름이 value에는 금액이 들어갈 것이다.
var dicData = [String:Int]()

//사람과 보유금액의 배열은 1:1이므로 사람이든 금액이든 아무 배열이나 잡고 돌리면 되지만 난 사람 배열로 돌린다.
for i in 0..<arrPerson.count {
    //dictionary의 key에 사람배열의 값, value에 보유금액의 값을 저장한다.
    dicData[arrPerson[i]] = arrMoney[i]
}

// 출력해보면 순서대로 홍길동 10000000, 고길동 30000000, 둘리 0이 찍히는것을 확인할 수 있다.
for (key, value) in dicData {
    print("\(key) : \(value)")
}

print("정렬 후 결과")

// 이제 정렬을 해보자
// 오름차순정렬이고 만약 내림차순이 하고싶다면 $0.1 < $1.1 대신 $0.1 > $1.1바꿔주면 된다.
// 참고로 0.1, 1.1은 첫번째 인자의 value 두번째 인자의 value를 뜻한다.
// 결과는 튜플로 반환가능하다.
var tupSortResult = dicData.sorted {$0.1 < $1.1}

//print해보면 정렬된 상태로 확인된다.
//[(key: "둘리", value: 0), (key: "홍길동", value: 10000000), (key: "고길동", value: 30000000)]
print("\(tupSortResult)")

//for문을 통해 돌려가며 찍어보면 아래처럼 보여진다.
// 둘리 0
// 홍길동 10000000
// 고길동 30000000
for i in 0..<tupSortResult.count {
    print("\(tupSortResult[i].key) \(tupSortResult[i])")
}

반응형
Posted by Hippalus
,

반응형

visual studio code를 설치하고 나면 기본 언어 설정이 auto인지라 메뉴명이나 결과안내 메세지들이 영어로 나온다.
영어가 익숙한 자들이야 그냥 쓰면 되겠지만 세종대왕의 얼을 지키려드는 자는 한글로 바꿔주면 되겠다.

방법은 쉽다.

참고로 난 chatGPT에 물어보니 한 세번 엉뚱한 답을 줬지만 결국 바른 답을 내주었다.

먼저 좌측 하단의 톱니바퀴 아이콘을 클릭 후 팝업컨텍스트 메뉴에서 설정메뉴를 누르거나 단축키로 ctrl + , 키를 누른다.

그럼 설정 메뉴가 호출되는데

여기 상단의 설정 검색이란 텍스트 박스에 아래와 같이 입력한다.
locale

그럼 맨 위에 TypeScript:Locale이 보이는데 
콤보박스에서 ko를 선택하고 vscode를 종료 후 다시 실행한다.

그럼 이처럼 영어 메뉴나 메세지들이 한글로 보이기 시작한다.

반응형
Posted by Hippalus
,

클로저 기초 2

swift 2023. 7. 11. 05:48

반응형

본 포스팅은 남 포스팅을 공부하며 정리한 내용이다.
원본 강좌 포스팅은 아래를 참고
(https://www.boostcourse.org/mo122/lecture/11297?isDesc=false)

클로저를 포함해 요즘것들은 뭐가 그리 잘났다고 줄여대는지 도덕책 근본이 없다.
개발은 평생 지 혼자 싸들고 하나
남 생각도 할 줄 알아야 그기 사람 아이가 그기 마!

클로저는 다양하게 표시할 수 있는데 일단 클로저를 받아줄 함수를 선언하자
Int형의 인자 a, b 2개를 받고 클로저를 받을 method마찬가지로 Int형 2개와 리턴형은 당연히 Int다
콩에는 콩 팥에는 팥이다.

func calc(a:Int, b:Int, method:(Int, Int)-> Int) -> Int{
    return method(a, b)
}

후행클로저
위 calc라는 함수의 마지막 파라메터가 클로저가 함수의 마지막 인자일 때 가능하며, 마지막 파라메터의 이름을 생략할 수 있다.
이렇게
result = calc(a:10, b:10) {(left:Int, right:Int) -> Int in
    return left + right
}

반환타입 생략
상식적으로다가 파라메터가 Int가 넘어왔으면 Int를 리턴해준다라는것 정도는 컴파일러가 알기 때문에 리턴 타입인 -> Int는 생략해도 되겠다.
다만 in은 삭제 불가

이렇게 호출해야 하는걸
result = calculate(a: 10, b: 10, method: { (left: Int, right: Int) -> Int in
    return left + right
})

method를 날려줄 수 있고
result = calculate(a: 10, b: 10), method: { (left: Int, right: Int) -> Int in
    return left + right
}

-> Int도 날려줄 수 있다.
result = calc(a:10, b:10) {(left:Int, right:Int) -> Int in
    return left + right
}

최종 결과물은 이러하다.
retult = calc(a:10, b:10) {(left:Int, right:Int) in   
    return left + right
}

위에 단축한 결과와
아래 원래 
result = calc(a: 10, b: 10, method: { (left: Int, right: Int) -> Int in
    return left + right
})

단축 인자 이름
result = calc(a: 10, b: 10, method: { (left: Int, right: Int) -> Int in
    return left + right
})

result = calc(a: 10, b: 10) {
    return $0 + $1
}

암시적 반환
한줄로도 표현이 가능한데...
클로저가 반환값이 있다면 클로저의 마지막 줄 결과값을 암시적으로 반환값으로 치부하여 return 없이도 return
뭔 홍길동 호부호형도 아니고 리턴을 왜 리턴이라 하지 못하는지.
깔끔은 하지만 좀 그렇다.
result = calc(a: 10, b: 10) { $0 + $1 }

반응형

'swift' 카테고리의 다른 글

클로저 기초 1  (0) 2023.07.10
swift int 변수를 string형으로 변환 그리고 비교  (0) 2018.11.21
Posted by Hippalus
,