일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 도커
- 자바
- 리액트
- 스프링부트
- mybatis
- 스프링
- Java
- c#
- 파이썬
- 쿠버네티스
- git
- springboot
- Spring
- docker
- github
- 마이바티스
- Winform
- Spring Boot
- DataGridView
- machine-learning
- react
- Kotlin
- AWS
- design pattern
- VOA
- MySQL
- 리팩토링
- kubernetes
- Python
- 코틀린
Archives
- Today
- Total
보뇨 다이어리
코틀린 디자인 패턴 - 관용구와 안티 패턴 (상수 효율적으로 사용하기) 본문
반응형
항상 머리속으로 외우고 넘어갔던 부분인데 정리좀 할겸...
아래와 같이 할경우 Kotlin 프로젝트만 사용할때는 MAX_SIZE_1, MAX_SIZE_2 의 차이점이 느껴지지않는다.
단순한 차이인데 MAX_SIZE_1 을 Java 에서 사용할때는 Chapter08.Companion.MAX_SIZE_1 로 접근하게 되고,
MAX_SIZE_2 을 Java 에서 사용할때는 Chapter08.MAX_SIZE_1 로 접근하게 된다.
그외에 다른 부분이라면 Java 로 변환할때 Companion 바깥쪽에도 getter 가 생긴다는 점이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class Chapter08 {
companion object {
val MAX_SIZE_1 = 3
@JvmStatic
val MAX_SIZE_2 = 3
const val MAX_SIZE_3 = 3
}
@Test
fun valuee() {
val maxSize = MAX_SIZE_1
val maxSize2 = MAX_SIZE_2
val maxSize3 = MAX_SIZE_3
println("$maxSize, $maxSize2, $maxSize3")
}
}
|
cs |
아래 코드가 Java 로 변환될때이다.
보면 단순하게 const val 를 선언한것이 가장 깔끔해서 앞으로도 저렇게 사용할꺼같다.
왜냐하면 Java 에서 쓸때는 @JvmStatic 추가없이 동일하게 Chapter08.MAX_SIZE_3 로 사용할수있기때문!
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
@Metadata(
mv = {1, 9, 0},
k = 1,
xi = 48,
d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u0002\n\u0002\b\u0002\u0018\u0000 \u00052\u00020\u0001:\u0001\u0005B\u0005¢\u0006\u0002\u0010\u0002J\b\u0010\u0003\u001a\u00020\u0004H\u0007¨\u0006\u0006"},
d2 = {"Lcom/example/mavenkotlinexample/Chapter08;", "", "()V", "valuee", "", "Companion", "maven-kotlin-example"}
)
public final class Chapter08 {
@NotNull
public static final Companion Companion = new Companion((DefaultConstructorMarker)null);
private static final int MAX_SIZE_1 = 3;
private static final int MAX_SIZE_2 = 3;
public static final int MAX_SIZE_3 = 3;
@Test
public final void valuee() {
int maxSize = MAX_SIZE_1;
int maxSize2 = MAX_SIZE_2;
int maxSize3 = 3;
String var4 = maxSize + ", " + maxSize2 + ", " + maxSize3;
System.out.println(var4);
}
public static final int getMAX_SIZE_2() {
return Companion.getMAX_SIZE_2();
}
@Metadata(
mv = {1, 9, 0},
k = 1,
xi = 48,
d1 = {"\u0000\u0014\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0007\b\u0086\u0003\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002R\u0014\u0010\u0003\u001a\u00020\u0004X\u0086D¢\u0006\b\n\u0000\u001a\u0004\b\u0005\u0010\u0006R\u001c\u0010\u0007\u001a\u00020\u00048\u0006X\u0087D¢\u0006\u000e\n\u0000\u0012\u0004\b\b\u0010\u0002\u001a\u0004\b\t\u0010\u0006R\u000e\u0010\n\u001a\u00020\u0004X\u0086T¢\u0006\u0002\n\u0000¨\u0006\u000b"},
d2 = {"Lcom/example/mavenkotlinexample/Chapter08$Companion;", "", "()V", "MAX_SIZE_1", "", "getMAX_SIZE_1", "()I", "MAX_SIZE_2", "getMAX_SIZE_2$annotations", "getMAX_SIZE_2", "MAX_SIZE_3", "maven-kotlin-example"}
)
public static final class Companion {
private Companion() {
}
public final int getMAX_SIZE_1() {
return Chapter08.MAX_SIZE_1;
}
public final int getMAX_SIZE_2() {
return Chapter08.MAX_SIZE_2;
}
/** @deprecated */
// $FF: synthetic method
@JvmStatic
public static void getMAX_SIZE_2$annotations() {
}
// $FF: synthetic method
public Companion(DefaultConstructorMarker $constructor_marker) {
this();
}
}
}
|
cs |
반응형
'컴퓨터 관련 > Kotlin 정보' 카테고리의 다른 글
코틀린 디자인 패턴 - 관용구와 안티 패턴 (입력유효성 검사) (0) | 2024.12.18 |
---|---|
코틀린 디자인 패턴 - 동작 패턴 이해하기 (해석기) (0) | 2024.12.16 |
코틀린 디자인 패턴 - 동작 패턴 이해하기 (책임연쇄) (0) | 2024.12.16 |
코틀린 디자인 패턴 - 동작 패턴 이해하기 (커맨드) (0) | 2024.12.16 |
코틀린 디자인 패턴 - 구조 패턴 이해하기 (상태) (2) | 2024.12.13 |