4. 클래스, 객체, 인터페이스 _ 클래스와 인터페이스 _ 뻔하지 않은 생성자와 프로퍼티 _ 데이터 클래스와 클래스 위임 _ object 키워드 사용 === 4.1 클래스와 인터페이스 === 4-1. 클래스의 상속 개수 제한 - 클래스는 여러개의 interface를 상속받을 수 있지만, class는 하나만 상속 받을 수 있다, 4-2. override 변경자는 실수로 상위 클래스의 메서드를 오버라이드 하는 경우를 방지해줌 - 상위 클래스에 있는 메서드와 시그니처가 같은 메서드를 우연히 하위 클래스에서 선언하는 경우, 컴파일이 안되기 때문에 override를 붙이거나 메서드 이름을 바꿔야만 한다. 4-3. 한 클래스가 2개의 인터페이스를 구현할 때(상속 받을 때) 생길 수 있는 문제점 만약 아래에서 But..
분류 전체보기
오늘은 앱개발 과제에서 새롭게 알게 된 메서드 registerForActivityResult에 대해 리뷰해보려 한다. 기존에 액티비티 흐름에서 A(B call) -> B(result send) -> A(result receive) 구조를 짜려면 startActivityForResult를 사용했다. 하지만, 지금은 startActivityForResult가 Deprecated됐다. 그 이유는 A에서 새롭게 시작된 Some 액티비티에서 메모리를 많이 사용할 경우 이전에 열려있던 A 액티비티가 다운되버려서 제대로 callBack을 받지 못할 때가 있었기 때문이다. 이를 해결하기 위해서 새로운 Some 액티비티를 실행시키는 부분과 callBack을 관리하는 부분을 분리했다. -> 이렇게 탄생한게 register..
- 하드코딩 대신 res/values/strings.xml에 정의하고 사용하는 이유 : 다국어 지원을 위함 - 나인 패치(9-Patch) 이미지 : 이미지에서 늘어날 수 있는 영역과 원본 크기대로 표시되어야 할 영역을 구분하여, 리니어 레이아웃 등을 사용할 때, 원본 이미지가 깨지지 않으면서 자연스럽게 확장되도록 만들어진 것 - Constraint Widget은 최소 3개의 연결이 있어야 오류가 발생하지 않는다. ㄴ(추가) 정확히는 Start or End 중 1개, Top과 Bottom 중 하나씩은 제약조건이 필수적이다. ㄴ(추가) ConstraintLayout에서 절대 배치는 사용하지 말 것 - res/values/Style.xml에 커스텀 디자인을 정의할 수 있다. (커스텀 컴포넌트 아님) Linea..
[내배캠 - 오늘의 문제] https://school.programmers.co.kr/learn/courses/30/lessons/131128 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 테스트 케이스 11~15에서 시간 초과 Error가 발생하여 로직을 계속 수정(시간초과 -> 600ms -> 300ms -> 230ms)하면서 결국 해결했는데 MutableList로 선언한 변수를 IntArray로 변경하니 230ms -> 60ms로 많은 시간 단축 효과가 있었다. 그래서 MutableList와 IntArray의 속도 차이를 간단히 리뷰해보려 한다. v..
[내배캠 - 오늘의 문제] https://school.programmers.co.kr/learn/courses/30/lessons/136798 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제의 point1. 1부터 n(최대 100,000)까지의 순회하며 i가 가진 약수의 개수를 구한다. 문제의 point2. 각 개수가 limit 보다 크다면 power 값으로 대체해야함 이후 sum해서 return 0. 처음의 접근 방식 2중 for문을 돌며, O(N^2)의 로직을 돌림 -> 시간 초과 1. 약수를 구할 때, 제곱근을 이용하여 시간 단축시킴 O(N) *..
[내배캠 - 오늘의 문제] 문제의 point1. n개의 요소중 3개를 뽑는 로직 // Time: 5.99 ms, Memory: 61.2 MB class Solution { val combinationNumbers = mutableListOf() val combinationGroup = mutableListOf() lateinit var numbersBackup: IntArray fun solution(nums: IntArray): Int { // 1. 주어진 배열에서 3개씩 뽑는다. numbersBackup = nums combination(0, 0) // 2. 1차원 배열끼리 합한다. / 그 합한 수가 소수인지 판별한다. return combinationGroup.map { numbers -> numb..
오늘은 내배캠 5주차 강의에 있는 scope function의 정의와 사용법, 사용시기 등을 정리해보려한다. 1. let - 람다의 결과를 반환 / it 사용 // 1. non-null 값에 대해서만 code block을 실행시켜야 할 때 var strNum = "10" var result = if(strNum != null) Integer.parseInt(it) else null var result = strNum?.let { // 중괄호 안에서는 it으로 활용함 Integer.parseInt(it) } // 2. 하나 이상의 call chain 결과를 호출할 때 (출력 등) val strings = listOf("APPLE", "CAR") strings.map{ it.length } .filter{ ..
C드라이브의 SSD를 교체한 뒤, gitHub를 사용하려고 하니 push 할 때, 문제가 생겼다. PS C:\Sparta\Calculator> git push -u origin main The authenticity of host 'github.com (20.200.245.247)' can't be established. ED25519 key fingerprint is SHA256:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Could not create directory '/..
[내배캠 - 오늘의 문제] 문제의 point1. roof를 돌며 socre와 최소값과 비교하여 최소값을 밀어내고, socre를 배열에 넣어야 한다. 문제의 point2. roof를 돌 때마다, K개의 요소중 최소값을 뽑아내야 한다. import java.util.PriorityQueue class Solution { fun solution(k: Int, scores: IntArray): IntArray { val answer = IntArray(scores.size) val pq = PriorityQueue() for((index, score) in scores.withIndex()) { if(pq.size pq.peek()) { pq..
오늘은 내일배움캠프의 Kotlin 문법 강의를 수강했다. 1~4주차 내용에 대해 새롭게 알게된 내용을 작성하려 한다. - 변수는 lateinit을 사용하고, 상수는 lazy를 사용한다. - class에서 lateinit로 선언한 프로퍼티가 초기화 됐는지 확인하는 코드 ->this::프로퍼티.isInitialized / 값이 아니라 참조의 형태로 사용해야 하기 떄문에 this:: 또는 ::를 붙인다. - ?. 연산자 => Null인지 확인하고 Null이 아닐때만 참조하는 메소드 - set 타입에는 union(합집합), intersect(교집합), subtract(차집합)를 지원하는 메소드가 있다. 5주차 내용 (03/11 추가함) 1. kotlin scope function -> https://rlaxod..