1. 구조체란 무엇일까? 구조체는 값(value) 타입이다. 스위프트에서 대부분 타입은 구조체라고 한다. 타입이름은 파스칼 케이스를 사용한다. 2. 구조체 관련 문법 구조체를 선언할 때는 C언어처럼 struct 키워드를 사용한다. struct Test { // 가변 프로퍼티 var mutableProperty: Int = 100 // 불변 프로퍼티 let immutableProperty: Int = 100 // 타입 프로퍼티 static var typeProperty: Int = 100 // 인스턴스 메서드 func instanceMethod() { print("instance method") } // 타입 메서드 static func typeMethod() { print("type method") } ..
이번에는 피타고라스의 정리에 관한 문제인데 다들 아는 a제곱 + b제곱 = c제곱 공식을 알고 있는 지에 대해 확인하는 문제같다. 문제 결국 문제에서 요구하는 값은 b제곱인데 이는 보통 c제곱 - a제곱이라는 사실을 알 것이다. 풀이 여기서 이 문제가 특이했던 점은 2줄 이상 수정 시 에러가 난다고 한다. 그래서 한 줄만 수정했더니 저렇게 초록색으로 괜찮다는 표시가 보였다. 내가 수정한 줄의 원본은 int b_square = c - a;였다. 실행 결과
이 문제를 보고 PCCE가 뭔가 했더니 프로그래머스의 코딩필수역량인증시험이라고 한다. 그래서 기출문제를 하나씩 풀어보고 있다. 다만, 자주 사용하던 코틀린은 없다는게 아쉬울 따름이다. 문제 간단히 말해 주어지는 코드의 빈칸 넣기 문제이다. 풀이 아래 3줄의 프린트문에 맞춰 변수 값을 채워주었다. 정말 언어를 알고 있느냐 수준의 문제였다.
정말 오랜만에 프로그래머스에서 몸풀기를 해보았다. 이번 문제는 정답률 대비 정답자가 적은 문제여서 선택해보았다. 문제 arr 원소마다 delete_list를 반복시켜 해당 숫자가 존재하는지 체크하는 방식으로 중복 원소를 걸러내고 남은 arr을 리턴하는 방식으로 해결했다. 물론 이 때, arr을 mutableList로 바꿔서 작업했다. 풀이 arr을 MutableList로 바꾼 후 중복 검사에서 걸린 원소는 remove를 한 뒤, 문제의 요구 사항에 맞춰 IntArray로 형변환 후 리턴해주었다. 실행 결과
이번에 소개해볼 경험은 투명 액티비티를 만들어 본 경험을 공유해보려 한다. 다른 글처럼 이 기능이 왜 필요했나 설명해보겠다. 이번 요구사항은 툴바 우상단 옵션 메뉴를 눌렀을 때, FAB(FloatingActionButton) 여러 개가 보여야 했다. 나는 당연하게도 프래그먼트를 활용해야겠다 생각했지만 액티비티 구조가 CollapsingToolbarLayout을 사용하기 위해 rootView가 CoordinatorLayout이다 보니 스크롤 시 툴바 영역이 덮이지 않는 현상이 생겼다. 이렇다보니 액티비티를 띄우는게 더 심플하겠다는 생각이 들었고, 여기서 투명 액티비티를 만들어보게 되었다. 또, 투명 액티비티가 필요했던 이유는 일반 액티비티와 다르게 옵션 메뉴를 눌렀을 때 설정 메뉴들이 FAB로 보여야했기 ..
이번 글은 안드로이드 뷰페이저를 사용하며 리사이클러뷰에서 ItemDecoration을 사용했듯 페이지 간 마진을 설정하는 방법에 대해 소개해보려 한다. 뷰페이저에서 페이지 간 마진을 주기 위해서는 먼저 뷰페이저에 PageTransformer를 설정해야 한다. 그리고 MarginPageTransformer 클래스를 사용해 생성자에 마진을 설정할 픽셀 값을 전달하면 된다. 여기서 다들 dp 단위를 사용하고 싶을테니 dp를 px단위로 변환하는 과정이 필요하다. 이젠 코드로 한 번에 살펴보자. https://gist.github.com/BonusTrack02/aed704c6c989a9345444758894c7acff ViewPager2 set page margin including dp to px convert..
저번 글까지는 DateRangePicker에 관련된 설정을 소개하는 글이었다. 이번 글에서는 DateRangePicker에서 선택한 날짜를 가져온 경험을 소개한다. 바로 짧은 코드를 첨부해본다. https://gist.github.com/BonusTrack02/f6c50a55da4ff9829f57f8578693d04c DateRangePicker PositiveListener using Material3 DateRangePicker PositiveListener using Material3. GitHub Gist: instantly share code, notes, and snippets. gist.github.com 정말 단순히 DateRangePicker에서 날짜를 선택한 뒤 저장 버튼을 눌렀을 때만..
드디어 DateRangePicker의 마지막 설정이다. 미래 날짜가 선택되지 않도록 만드는 것이 요구사항이어서 이에 맞추기 위해 설정을 찾아보았다. 바로 코드를 첨부해보도록 하겠다. 아래 코드는 이전 1, 2편에서 소개했던 설정들이 같이 적용되어 있다. https://gist.github.com/BonusTrack02/729539409ad71d862df188731d63ecf6 DateRangePicker using Material3 all custom settings DateRangePicker using Material3 all custom settings - SearchFragment.kt gist.github.com constraintsBuilder라는 변수를 통해 DateValidatorPoint..
ㅇ저번 글에서 나는 DateRangePicker가 Dialog처럼 실행되게 설정해보았다. 이번에는 2주 전 날짜부터 오늘 날짜까지 선택된 상태로 실행되는 기능을 만들어보려 한다. 오늘 날짜 및 2주 전 날짜 선택된 상태로 실행하기 DatePicker와 달리 DateRangePicker에서 사용하는 클래스가 있다. Pair 라는 녀석인데 이 녀석의 패키지는 androidx.core.util이다. 얘로 뭘하려고 할까? 시작과 종료 날짜를 지정한다. 코드를 먼저 첨부하고 설명을 이어가보겠다. https://gist.github.com/BonusTrack02/5587dfd7b87cad867f716bff4ba70575 DateRangePicker using Material3 theme and set current..
이번 글에서는 머터리얼에서 제공하는 날짜 범위 선택 기능에서 내가 사용한 몇가지 설정을 공유하려고 한다. 달력 생성 방식(?) 맨처음 문제가 되었던 녀석이다. 바로, 내가 원하던 방식은 Dialog처럼 선택기가 보이는 것이었다.(BottomSheet 관련 글에서 소개했던 Modal 방식을 원했다.) 하지만, 일반 바(bar)형 기종에서는 전체화면(액티비티같은?)으로 DateRangePicker가 실행되었다. 특이하게 폴드 기종이나 태블릿에서는 DateRangePicker가 Dialog처럼 실행되었다. 정확히 찾아보진 않았지만 머터리얼에서 휴대폰 스크린 사이즈에 따라 실행 방식을 다르게 두었다고 생각을 했고 결국 머터리얼에서 이를 제어하기 위해서는 스크린 사이즈에 따라 테마를 다르게 설정했다고 생각했다. ..