일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 안드로이드 레트로핏 사용법
- 멤버변수
- 안드로이드 라이선스
- 안드로이드 레트로핏 crud
- 안드로이드 유닛 테스트
- 플러터 설치 2022
- ar vr 차이
- 객체
- 안드로이드 라이선스 종류
- 안드로이드 os 구조
- 큐 자바 코드
- 서비스 쓰레드 차이
- rxjava disposable
- android retrofit login
- jvm이란
- 자바 다형성
- 스택 큐 차이
- 2022 플러터 설치
- 클래스
- jvm 작동 원리
- 스택 자바 코드
- Rxjava Observable
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 유닛테스트란
- android ar 개발
- rxjava hot observable
- ANR이란
- 서비스 vs 쓰레드
- rxjava cold observable
- 안드로이드 유닛 테스트 예시
- Today
- Total
목록개인 공부/Kotlin (29)
나만을 위한 블로그
먼저 for문에 사용할 컬렉션을 정의한다. fun main() { val names: List = listOf("감", "배", "사과", "포도", "바나나", "파인애플", "오렌지") } 이 names 라는 리스트 안의 값들을 출력하기 위해선 아래처럼 중괄호가 없어도 출력할 수 있다. for (item in names) println(item) // 감 // 배 // 사과 // 포도 // 바나나 // 파인애플 // 오렌지 중괄호를 사용한다면 아래처럼 쓸 수 있다. 결과는 위의 주석 앞에 "name : "이 붙은 형태일 뿐이다. for (name in names) { println("name : $name") } 그런데 for문을 사용하는 이유 중 하나가 배열 또는 컬렉션의 특정 인덱스를 갖는 아이템..
자바에 static 변수(필드), 메서드가 존재하듯 코틀린에서도 정적 변수와 함수가 존재한다. 그러나 코틀린의 문법 특성 상 이것들을 클래스 안에 둘 수는 없고, 코틀린에는 static이라는 키워드가 존재하지 않는다. 그럼 어떻게 사용할까? 이 때를 위해 존재하는 것이 companion object라는 것이다. 사용법은 아래와 같다. class TestClass { companion object { val name = "TestClass" fun method() {} } } fun main() { TestClass.name TestClass.Companion.name TestClass.method() TestClass.Companion.method() } 인텔리제이에서 위 코드를 복붙하고 보면 Compa..
자바와 100% 호환을 자랑하는 코틀린답게 코틀린 또한 자바처럼 생성자를 갖고 있다. 코틀린에서 생성자는 어떻게 사용할까? 먼저 자바에서 어떻게 사용하는지 확인해보자. 이름과 나이를 받는다고 가정하면 아래와 같이 만들 수 있다. public class ConstructorJavaTest { private String name; private int age; public ConstructorJavaTest(String name, int age) { this.name = name; this.age = age; } public ConstructorJavaTest() { } public String getName() { return name; } public void setName(String name) { t..
코틀린을 공부하다 보면 이따금 is와 as 연산자를 볼 수 있다. 뭔지 몰라서 검색해보니 is와 as 연산자는 같이 설명되는 경우가 제법 있었다. 그래서 공부한 내용을 기록할 겸 포스팅으로 작성하게 되었다. 먼저 is와 as 각각의 사전적 정의는 아래와 같다. is : be의 현재 시제의 3인칭 단수 be : 있다, 존재하다, 만들다 as : ~처럼(같이) / (자격, 기능 등이) ~로(서) / ~만큼 ~한 is는 자바에서 상속을 공부할 때 is-a 관계(~는 ~이다)를 공부하면서 본 적이 있다. Person이 Animal을 상속한다면 Person은 Animal이다 식으로 하위 클래스는 상위 클래스의 한 종류가 되야 한다는 내용으로, 강한 뉘앙스를 가진 단어라고 생각한다. as는 정의의 뉘앙스로 봤을 때..
확장 : 범위, 규모, 세력 따위를 늘려서 넓힘 함수 : 코드들의 모음. fun으로 선언하는 그것(본인의 추측임) -> 확장 함수? 범위나 규모 따위가 늘어난 함수? 함수의 범위나 규모를 늘려서 선언하는 것? 확장 함수라는 말을 처음 보고 생각한 것들을 간단하게 적어봤다. 공부해보니 코틀린에서 말하는 확장 함수(Extension Functions)란 이미 존재하는 클래스에 함수(메서드)를 추가하는 것이라고 한다. 클래스에 '원래 없었던' 함수를 추가해 클래스의 크기를 넓힌다고도 생각할 수 있으니, 확장이란 단어를 쓴 것이 이해가 된다. 그럼 이 확장 함수란 건 어떻게 쓰는 걸까? 간단하게 예시 상황을 만들어보기로 했다. 내가 개발 공부하면서 자주 쓰는 것 중 하나가 ArrayList다. 이 ArrayLi..
이번 포스팅에선 안드로이드에서 코틀린으로 쉐어드 프리퍼런스를 사용하는 법을 작성하려고 한다. 먼저 쉐어드 프리퍼런스는 뭔지 간단히 정리하고 넘어가자. SharedPreferences(이하 쉐어드)는 키밸류 쌍을 포함하는 파일을 가리킨다. 안드로이드에서 값을 저장하는 방법은 쉐어드, DB, 파일 등이 있는데, 이 중 쉐어드는 저장하고 꺼내오는 속도가 빨라서 간단한 값을 저장할 때 많이 쓰인다. 자동 로그인, 뭔가를 소개하는 액티비티를 처음 앱에 들어왔을 때만 보여주고 두 번째 들어왔을 때는 보여주지 않는다던가 하는 때에 사용을 고려해볼 수 있는 것이다. 설명하자면 여러가지 더 많이 있지만 이 글은 쉐어드에 대해서 설명하는 글이 아니기 때문에 자세한 내용은 구글링하자. 먼저 앱에서 회원가입하는 페이지를 만들..
코틀린도 프로그래밍 언어니까 리스트나 맵 따위의 컬렉션 시리즈도 제공하고 있다. 그런데 사용법이 조금 특이하다. 자바는 대충 ArrayList 객체화 때리고 안에 값 add 해서 지지고 볶으면 그만인데, 코틀린에선 안의 값을 수정할 수 있는 컬렉션과 수정할 수 없는 컬렉션으로 나눠서 만들어놓았다. val, var의 차이를 컬렉션에서도 구현해놓은 것 같다. 시작하기 전에 코틀린의 컬렉션이 가진 상속 구조를 그림으로 표현한 것부터 간단하게 보고 넘어가자. 앞에 Mutable만 없었다면 자바에서 자주 보이는 것들이다. 그럼 List부터 어떤 식으로 만드는지 확인하자. List List는 "목록, 명단, (특정 순서로) 열거하다"란 뜻이 있는 단어다. 그래서 List에는 하나 이상의 값들을 넣을 수 있다. 코틀..
코틀린을 사용할 때 변수를 선언하려면 아래와 같이 한다. 띄어쓰기는 굳이 할 필요 없다. val 변수명: 타입 var 변수명: 타입 String을 써서 문자열 데이터를 집어넣는다면 아래와 같이 할 수 있다. val name: "Tistory" 그리고 코틀린에선 자바처럼 세미콜론(;)을 붙일 필요가 없다. 맨날 쓰다 안 쓰려니까 허전하다 처음에 이 부분을 보고, val과 var로 나눠쓰는 이유가 궁금했다. 그래서 상상해봤다. 특징이 다른 걸 강조하기 위함인가? 그냥 단순하게 철자가 다른가? int와 Integer의 차이같은 건가? 여러가지로 상상해봤지만 답은 서로 특징이 다르기 때문이었다. val 먼저 val은 Valueable의 줄임말이다. Valuable의 사전적 의미는 "소중한, 귀중한, 가치가 큰"..
안드로이드 스튜디오에서 코틀린으로 앱을 만들 때 자바를 쓸 때처럼 인텐트로 액티비티를 전환하거나, 인텐트에 데이터를 넣어 다른 액티비티에서 사용해야 할 필요가 있다. 이 글에선 이런 처리들을 어떻게 하는지 포스팅하려고 한다. 먼저 MainActivity의 XML 코드다. 아이디와 비밀번호만 사용할 거기 때문에 간단하게 짰다. 다음은 .kt 파일을 코딩한다. class MainActivity : AppCompatActivity() { private val TAG: String = "MainActivity" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.a..