반응형

android java에서 흔히 발생하는 nullPointException(NPE).

kotlin에서는 널 안전성 연산자를 제공하여 Null값에 대해 사전에 방지가 가능하다.

 

널 (null)이란 객체가 선언되었지만 초기화되지 않은 상태를 뜻한다.


※ Java NPE 예시

public class MainActivity extends AppCompatActivity {
    private String text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        int length = text.length();
    }
}

 

위 코드에서 text 변수가 초기화되지 않았으므로 NPE가 발생할 수 있다.


※ Kotlin 널 안전성 부여

class MainActivity : AppCompatActivity() {
    private var text: String? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // text 변수가 null인 경우를 처리하기 위해 안전한 호출 ?. 연산자를 사용합니다.
        val length = text?.length

        // 만약 text가 null이 아닌 경우에만 길이를 출력합니다.
        length?.let {
            println("Text length: $it")
        }
    }
}

 

text 변수에 nullable한 (String?)으로 선언되어 null값을 부여 할 수 있다.

var t1 : String? = "test"
t1 = null // (o)

var t2 : String = "test"
t2 = null // (x)

※ 널 안전성 호출 (?.)

nullable로 선언한 변수는 null을 대입할 경우 NPE(NullPointException)가 발생할 수 있기에 해당 변수에 접근 시 ?.로 접근을 해야한다.


※ 엘비스 연산자 (?:)

?: 를 우측으로 90도 회전하면 엘비스 프레슬리가 된다고 해서 붙여진 엘비스(Evis) 연산자

해당 연산자의 왼쪽 값이 null 이면 우측 값을 반환한다.

var test : String? = "세글자"
Log.d(TAG, "test 문구 글자 수 : ${test?.length ?: -1}")
test = null
Log.d(TAG, "test 문구 글자 수 : ${test?.length ?: -1}")

결과값

test 문구 글자 수 : 3
test 문구 글자 수 : -1

※ 예외 (!!)

!! 연산자는 객체가 널일 때 예외를 일으키는 연산자.

var test : String? = null
Log.d(TAG, "test : ${test!!.length}")

// 결과값
java.lang.NullPointerException: println needs a message
    at ...

해당 코드는 NPE를 발생시킨다. 특정 사항이 아니라면 사용하는 것을 지양한다.

반응형
반응형

2024.05.12 (일)

 

집에서 갈 수 있는 선택지가 두개가 있는 것 같다.

 

1. 오산천

2. 수원천

 

오산천 자주 가 봤으니 안가본 길로 가보기 위해 황구지천으로 이동..!

 

자전거 타면서 느끼는거지만 풍경이 상당하다

 

원래는 황구지천 - 수원천 - 광교로 넘어가려했으나, 위로가는 길을 못찾겠다

 

어쩔 수 없이 아래로 가는 길로 선택

뭔가 날도 좋고 사진도 찍고 싶어서 여러장 찍으면서 이동 한 날

이른 아침이라 추울 것 같아서 바람막이 입었는데

굿 초이스

 

진위천 다다랐을 때 라이딩 하시는 분들 따라갔더니

공사장 엔딩..

전날에 비도많이오고 해서 온통 진흙범벅

로드는 여기서 돌아갈게요 😭

진위천 오산천 사이에 있는 자전거 길

 

여기도 풍경 맛집

오산천 자전거길

다음엔 수원천으로 🔥🔥

반응형
반응형

2024.05.04 (토)

 

자전거 고글 드디어 도착해서 착용하고 라이딩 하러 갔다..!

루디 프로젝트

도수 클립 별도 구매라 가격이 생각보다 올라갔지만.. 첫 고글이라 기대 😂

 

바지도 긴바지는 왠지 민망해서 반바지로 하나 샀다

(나만 그런가?)

날이 갑자기 확 더워진 느낌

오산천 따라서 내려오다가 자전거 길이 끝나길래 잠깐 쉬어준다

소풍정원

자전거 길 끝나는 지점에서 동호회 분들 따라가다보니 나온 소풍정원

여기서 많이 쉬고계시던데 신기했다..

 

동호회 들어가볼까?

이렇게 입고 나온게 처음이라 어색하긴한데, 달리다 보니 아무생각 없어졌다 😎

아침에 토마토 주스 한잔 마시고 퍼질뻔한 찰나에 찾은 국밥집

 

라이딩하고 먹는 밥..👍

 

올라갈 땐 카카오 네비 켜서 올라갔는데, 평택 시내 다 돌고가는 기분,,,,, 무엇보다 모든 신호 다 멈춰서서 비추

 

우여곡절 끝에 오산천으로 합류해서 집으로 무사복귀🔥

반응형
반응형
    // Property that stores the button press time
    var initTime = 0L

    // Back button event handler
    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        // Processing when the back button is pressed
        if (keyCode === KeyEvent.KEYCODE_BACK) {
            // Handles when the back button is pressed for the first time or when 3 seconds have passed since the back button was pressed
            if (System.currentTimeMillis() - initTime > 3000) {
                Toast.makeText(this, "Press again to exit", Toast.LENGTH_SHORT).show()
                initTime = System.currentTimeMillis()
                return true
            }
        }
        return super.onKeyDown(keyCode, event)
    }
반응형
반응형

오래된 친구들과 떠나는 태안 글램핑🏕️

양 옆의 E 사이에서 기빨리는 I..

서산 근처 하나로마트에서 장보고 글램핑장으로 이동

한마음 오션플레이스

숙소는 신두리해수욕장 앞에 있는 한마음오션플레이스

 

각 방 마다 바베큐를 즐길 수 있는 공간과 뷰가 상당히 맘에 든다.

다들 갑자기 아무말도 안하고 쳐다보고 있는 물 웅덩이

물멍..?


시간대 별 서해 뷰 맛집..👍

 

처음 먹어본 소 꼬리 구이

 

그리고 훈제 만들어 주는 키트? 박스?

 

신기했고 잘먹었습니다 🙏

 

불멍하면서 노래도 듣고 마시멜로도 구워먹기🔥

 

물 빠진 서해 밤 바다 산책

 

유일하게 같이 있으면 편한 10년지기들

 

잘 놀고갑니다 👊

 

반응형
반응형

※ 미리 알았으면 좋았을 과학화예비군훈련장 후기 및 꿀팁

 

입소 방법

① 자차 이용 🚗

    - 훈련장 내부에 주차장 사용

        ※ 도로가 좁고 교통이 혼잡해서 최대한 일찍 나서는 것을 추천

 

② 셔틀버스 이용 🚌

    - 비봉면 행정복지센터 앞 07:00 ~ 08:30 운행

 

9시 까지 입소해야하지만 8시 조금 넘어서 들어오는 것을 추천

입소 과정

작년 훈련과 가장 달라진 점은 입소과정운영방식

 

  1. 입구에서 핸드폰으로 자가진단 후 QR 태그

  2. 10명씩 한팀을 이루어 활동

  3. 팀 번호 패치 및 웨어러블 기기 수령 (갤럭시 워치)

  4. 식사여부 (제육 / 돈까스)  ※메뉴는 변경될 수 있음

 

워치에 본인의 정보가 입력되어있고, 훈련현황, 합격여부, 훈련예약, 계좌정보, 식사여부 변경 등 웨어러블 기기를 활용한 운영방식으로 변경.

훈련

작년에는 선착순으로 퇴소여부를 결정했지만, 올해부터는 훈련 마무리 시간 + 훈련 점수로 퇴소여부를 결정한다고 한다.

(두개의 조가 비슷한 시간에 훈련이 끝이 났다면, 훈련점수가 더 높은 조가 먼저 퇴소하는 방식)

 

각 훈련장을 웨어러블 기기로 예약을 하고 점수와 합격여부가 바로 반영이 되기 때문에 점수가 꽤 중요해졌다.

 

훈련장 예약은 곳곳에 배치되어있는 키오스크 같은 기계에서 각 조의 10번이 예약을 진행하면된다. (워치 태그)

 

문제를 풀어야하는 훈련은 각 조의 1번이 화면에 보여주는 링크에 접속하여 문제를 풀고 바로 반영한다.

TIP

1. 안보교육은 오전에 끝내자

  • 안보교육은 정해진 시간에만 문을 열어두기 때문에 시간을 잘 못 골라서 가게되면 하염없이 기다리게 된다.
  • (ex. 15:00 , 16:00 두개의 시간대가 있는데 15:10분에 도착하면 16:00 까지 기다려야한다...)
  • 훈련은 15:30 부터 퇴소 가능하기에, 오후 마지막 시간대 (16:00 ~ 16:40) 를 듣게 되면 제일 늦게 나갈 수 있다.

2. 점심 시간 30분 전에 줄 서기

  • 오전에 훈련을 최대한 많이 하는 것도 좋지만, 점심 줄을 늦게 서게 되면 앉아서 먹을 자리가 없다.
  • 바닥 및 계단에서 강렬한 햇빛을 받으며 밥먹을 수 있음. 

3. px이용

  • 점심을 신청하지않은 인원은 px에서 12:00 ~ 13:00 사먹을 수 있다. (훈련필증 필요없음)
  • 훈련이 끝나고 훈련필증을 소지하면 px 이용이 가능하다.
  • 안보교육 마지막으로 듣고 갔더니 화장품 쪽은 거의 품절.

 

반응형

+ Recent posts