앱개발 숙련 개인 과제 레이아웃 구현 구현 사항// 메인 페이지 구현 사항- RecyclerViewer를 이용해 리스트 화면을 만들어주세요.- 상단 툴바를 제거하고 풀스크린 화면으로 세팅해주세요. (상태바(시간/배터리 표시하는 최상단바)는 남기고)- 상품 이미지는 모서리를 라운드 처리해주세요.- 상품 이름은 최대 두 줄이고, 그래도 넘어가면 뒷 부분에 …으로 처리해주세요.- 상품 아이템들 사이에 회색 라인을 추가해서 구분해주세요.// 상세 페이지 구현 사항하단 가격표시 레이아웃을 제외하고 전체화면은 스크롤이 되어야합니다. 상단 툴바 제거 res/values/themes/themes.xml에서 앱의 테마를 NoActionBar로 설정한다. 매니패스트 파일에서 앱의 테마를 정의한 테마로 설정한다. 메..
챌린지반 4주차 세션 정리 RecyclerView의 패턴리사이클러뷰는 뷰홀더 패턴(ViewHolder pattern)을 강제한다. 뷰홀더 패턴은 뷰홀더를 선언해 각 항목 뷰에 대한 참조를 저장하여,뷰를 재활용할 때 매번 findViewById를 호출하지 않아도 되도록 한다. 이로 인해 리사이클러뷰의 성능이 크게 향상된다. RecyclerView 구성요소의 역할어댑터: 뷰와 데이터를 분리하는 역할을 한다.뷰홀더: 각각의 아이템뷰를 캡슐화하여 해당 아이템의 데이터를 바인딩한다. RecyclerView의 데이터 위치액티비티에서는 어댑터에 데이터를 넣어주고, 어댑터에서는 받은 데이터를 관리한다.결론적으로 리싸이클러뷰는 어댑터의 데이터를 가지고 있게 된다. RecyclerView의 OOP적 특징액티비티는 어..
앱개발 숙련 1주차 정리 - 3 다이얼로그 다이얼로그란? 사용자가 추가정보를 입력하거나 결정을 내리게 할 때 쓰이는 작은 창이다. 일반적으로 모달 형태로 나타나서 사용자가 다른 작업을 하기 전에해당 다이얼로그에서 요구하는 작업을 완료하도록 유도한다. 다이얼로그 구조다이얼로그는 제목(1), 콘텐츠 영역(2), 작업 버튼(3)으로 이루어져있다. 제목은 선택사항으로 단순 메시지나 질문을 하는 경우에는 없어도 된다.대화 상자 하나에 작업 버튼은 3개를 초과해서는 안된다. 다이얼로그 예제 각 버튼을 누르면 해당하는 다이얼로그를 띄운다. 기본 다이얼로그binding.btn1Alert.setOnClickListener { // 다이얼로그 생성 val builder = AlertDialog.Build..
앱개발 숙련 1주차 정리 - 2 프래그먼트 프래그먼트란? 프래그먼트는 액티비티 위에서 동작하는 모듈화된 인터페이스이다.프래그먼트를 사용하면 한 개의 액티비티 화면 안에서 특정 영역만 교체가 가능하다. 액티비티와 프래그먼트의 차이 액티비티는 인텐트를 통해서 데이터를 전달하지만,프래그먼트는 메소드를 호출시켜 다른 화면에 데이터를 전달한다. 프래그먼트 사용이유액티비티로 화면을 계속 넘기는 것보다, 프래그먼트를 이용하여화면의 일부만 바꾸는 것이 자원의 이동량이 적어 속도가 더 빠르다. 또한 액티비티를 적게 만들게 되어 액티비티의 복잡도가 줄어든다. 프래그먼트 전환 함수private fun setFragment(frag : Fragment) { // 프래그먼트 트랜잭션 시작 supportFragm..
앱개발 숙련 1주차 정리 - 1 뷰 바인딩 gradle 설정android{ ... buildFeatures{ viewBinding = true }}android studio 버전이 4.0이상이면 해당 구문을 그래들 파일에 추가한다. Activity 설정class MainActivity : AppCompatActivity(){ private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layou..
챌린지반 3주차 세션 과제 과제 1 과제 내용 요구사항에 맞춰 디자인 패턴 2개를 구현한다. Singleton 패턴object Logger{ fun log(message: String){ println("log: $message") }}fun main() { Logger.log("Hello, World")}Object로 Logger 클래스를 선언하여 싱글톤 패턴을 구현한다.해당 클래스는 시스템 전체에서 단 하나의 인스턴스만 존재하게 된다. 클래스.메소드 형식으로 오브젝트의 메소드를 호출할 수 있다. Stragety 패턴interface TextAlignmentStrategy { fun textAlign(text: String) : String}class LeftAl..
코드카타 소수 찾기 문제 numbers의 최대길이는 7이므로 조합 가능한 모든 수를 생성해도 시간초과가 나지 않는다. 입출력 예시 주어진 수를 각 자리수별로 나누고 가능한 모든 조합을 생성한 뒤중복을 제거하기 위해 집합에다 추가한다. 생성한 집합의 요소 중 소수에 해당하는 개수를 반환한다. "17" -> [1, 7] -> [1, 7, 17, 71] -> [7, 17, 71] -> 3"011" -> [0, 1, 1] -> [0, 1, 11, 10, 101, 110] -> [11, 101] -> 2위와 같은 과정을 통해 주어진 수에서 만들 수 있는 소수개수를 반환한다. 조합 생성 함수// str: 현재까지 생성된 숫자 문자열 // remaing: 아직까지 사용되지 않은 문자들private fun getC..
코드카타 가장 큰 수 문제 numbers의 최대 길이는 100,000이기에 주어진 수에서가능한 모든 순열을 만드는 방법은 시간초과를 발생시킨다. 입출력 예시 [0, 0, 0], 0 풀이class Solution { fun solution(numbers: IntArray): String { var res = numbers.map { it.toString() } .sortedWith { a, b -> (b + a).compareTo(a + b) } .joinToString("") return if (res[0] == '0') "0" else res }}정수를 이어붙이기 위해 정수를 모두 문자열로 변환..