코틀린 48

Textwatcher

EditText의 값이 변경될 때마다 입력 된 값을 실시간으로 관찰하면서 특정 작업을 처리 해주기 위한 인터페이스   binding.emailArea.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { //텍스트가 변경되기 전 호출 } override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { // 텍스트가 변경될 때마다 호출 //..

Repository

지난주 금요일부터 5일동안 강의를 듣고 자료를 찾아보고 직접 쳐봐도repository패턴이 이해되지 않아 글을 써서 정리해보기로 했다.인터페이스를 잘 모르니까 코드 동작원리가 전혀 와닿지 않았고 그나마 이해하고 있는 개념도 흔들렸다. repository뿐만 아니라 보다 근본적인 개념도 같이 잡는 걸 목표로 작성을 시작한다.    Repository Pattern데이터를 캡슐화하여 출처에 관계 없이 동일한 인터페이스로 데이터에 접근할 수 있도록 하는 패턴 출처에 관계 없이 내부에서 preference, room 등으로 저장한 cache data와 외부에서 api 등으로 끌어온 response data로 구분한다. ViewModel은 직접 Data에 접근해 데이터를 가져오는 것이 아니라 Repository에..

object

객체 object클래스를 정의하면서 인스턴스를 생성하는 키워드선언 : object {} 선언식Object declaration싱글톤Singleton패턴. 단일 인스턴스이므로 생성자 사용불가, 상속불가, 인스턴스 추가생성 불가Thread-safe : 멀티 스레드 환경에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램 실행에 문제가 없는 것lazy initialization : Object 키워드가 선언된 클래스는 외부에서 객체가 사용되는 시점에 초기화 표현식익명객체annonymous object. 호출할 때마다 새로운 인스턴스 생성여러 메소드를 오버라이드해야되는 경우 권장되고 하나의 메소드일 경우 람다식이 효율적리스너(object: 클래스() {} 형태로 많..

코루틴 Coroutines

코루틴 Coroutines많은 양을 동시 작업하며 메모리를 절약하여 비동기 프로그래밍에 권장되는 동시 실행 설계 패턴 지정된 작업 범위 내에서 실행이 되기 때문에 메모리 누수 방지    동기 Synchronous와 비동기 Asynchronous동기는 사전적 의미로 동시에 일어난다는 뜻이라 여러 일을 동시에 처리해준다는 의미같아서 비동기와 헷갈렸는데 일의 발생과 결과를 동시에 처리해준다고 이해하면 된다. 즉 일이 발생하면 그 일을 처리해줄 때까지 다른 일을 맡지 않는다.따라서 동기는 직렬적이고 비동기는 병렬적이다. 비동기와 병렬을 비읍으로 묶는 연상기억법으로 장기기억을 강화했다.    쓰레드Thread와 코루틴기능적으로는 비슷하지만 단일 쓰레드 내 여러 개의 코루틴을 실행. 코루틴은 특정 쓰레드에 바인딩되..

코틀린 2024.08.02

베이직챌린지

Q.1 [에디쌤] 1~100의 숫자중 2의 배수이면서 3의배수(and조건)인 숫자 출력해주세요 A.1fun main() {val answer = (1..100).filter{ it % 2 == 0 && it % 3 == 0} println(answer)}  Q.2 [에디쌤] 1~100까지 정수 중 홀수의 합을 출력해 주세요. [입력: X, 출력: 2500]A.2 fun main() {val answer = (1..100).filter{ it % 2 == 1}.sum() println(answer)}  Q.3 [에디쌤] 단어 뒤집기(입력: "Hello World", 출력: "olleH dlroW") 띄어쓰기 필수, 단어별로 뒤집기 A.3fun main() { val helloWorld = St..

과제 [조건문/반복문 문제 만들기]

달 달 무슨 달 7월 1일은 2번째 그믐달입니다. 7월 29일은 어떤 달일까요?    7월의 달 순환주기는 다음으로 정의됩니다.     그믐달 : 5일동안     삭 : 하루     초승달 : 7일동안     상현달 : 7일동안     보름달 : 하루     하현달 : 7일동안     그믐달 : 3일동안  홀수VS짝수1부터 100까지의 숫자 중, 짝수를 모두 더한 값과 홀수를 모두 더한 값은 각각 얼마일까요?   1000원 모아 태산(1)3번 문제 : 매일 급여가 1000원씩 오르는 일을 합니다. 1년동안 일을 하면 총 얼마를 받을까요? 1년은 365일로 하며 첫날은 1000원을 받습니다.   1000원 모아 태산(2)위의 일을 하다가 3천만원 이상 모으면 일을 그만두려고 합니다. 일한 날수와 금액은 얼..

코딩테스트 [x만큼 간격이 있는 n개의 숫자]

문제함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.   링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12954 풀이1. 접근1.1 관찰n개의 x배수를 Long배열로 담는 문제입력 : 정수출력 : 배열(Long) 1.2 계획 범위 : 1부터 n반복하기 : 반복횟수에 x를 곱하기반환하기 : Long타입으로 변환해서 담기    2. 시행착오2.1 시도 class Solution { fun solution(x: Int, n: Int): LongArray { var..

코딩테스트 [나머지가 1이 되는 수 찾기]

문제자연수 n이 매개변수로 주어집니다. n을 x로 나눈 나머지가 1이 되도록 하는 가장 작은 자연수 x를 return 하도록 solution 함수를 완성해주세요. 답이 항상 존재함은 증명될 수 있습니다.   링크 : https://school.programmers.co.kr/learn/courses/30/lessons/87389 풀이1. 접근1.1 관찰나머지가 1인 수 중에 최솟값을 찾는 문제입력 : 정수출력 : 정수 1.2 계획 조건 : n % x == 1       2. 시행착오2.1 시도class Solution { fun solution(n: Int): Int { var answer: Int = 0 for(i in 1..n) { if(n % i == 1)..

코딩테스트 [약수의 합]

문제정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요.   링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12928  풀이1. 접근1.1 관찰약수를 더해서 반환하는 문제입력 : 정수출력 : 정수 1.2 계획 n을 나눠서 조건에 따라 반복문으로 더해야겠다.     2. 시행착오2.1 시도class Solution { fun solution(n: Int): Int { var answer = 0 for(i in 1..n) { if(n % i == 0) answer += i } return answer }} 검증결과 : 성..

코딩테스트 [짝수와 홀수]

문제정수 num이 짝수일 경우 "Even"을 반환하고 홀수인 경우 "Odd"를 반환하는 함수, solution을 완성해주세요. https://school.programmers.co.kr/learn/courses/30/lessons/12937  풀이1. 접근1.1 관찰짝수 홀수 판단해서 반환하는 문제입력 : 문자 출력 : 문자열 1.2 계획 2로 나눠서 확인하고 반환해야겠다.     2. 시행착오2.1 시도 class Solution { fun solution(num: Int): String = if (num % 2 == 0) "Even" else "Odd"} 검증결과 : 성공      회고 순서대로 풀기로 해서 더 기초적인 문제로 내려왔다. 최대한 간결하게 쓰는 연습을 했다.