본문 바로가기

안드로이드

자바와 코틀린 -2

클래스

[테스트 케이스] 

'소스코드'패키지에서 
~(test)패키지는 안드로이드 기능과 상관없는 Java또는 Kotlin의 코드를 테스트할 수 있고
~(androidTest)패키지는 안드로이드 환경과 연관된 코들르 테스트할 수 있다.

test패키지의 ExampleUnitTest에서 assertEquals()함수는 예측 결과와 실제 결과가 동일하지 않다면 테스트를 실패시키는 함수이다.

Assert.assertEquals("e",lastString);

위와같이 사용할 수 있다.


[Java/Kotlin 개별 테스트 케이스]

@Test 는 함수가 '단위 테스트용 함수'라는 것을 알려준다.

@Test
    public void testNullType(){
        Assert.assertEquals(true, null instanceof String);
    }


[Getter,Setter 클래스]

코틀린은 Getter, Setter가 자동생성된다.

예를 들어 나이와 이름을 속성으로 갖는 클래스가 있을 때 
각 필드를 변경하거나 값을 가져오기 위한 Getter, Setter메소드가 있다.
나이에 해당하는 age는 값의 변경이 가능하기 때문에 Getter, Setter메소드가 모두 있고
이름에 해당하는 name의 경우에는 변경이 불가능하기 때문에 Getter메소드만 존재한다.

 

var로 선언하는 변수: Getter, Setter 전부 생성
val로 선언하는 변수: Getter만 선언

 

경우에 따라 Getter, Setter에 다른 코드가 필요할 수 있다.

예를들어 별명에 해당하는 nickname이라는 프로퍼티를 추가하고 대문자가 입력되더라도 소문자로 저장해야하는 경우에 다음과 같은 코드를 추가할 수 있다.

set(value) {
      //field는 Setter의 대상이 되는 field를 의미
      field = value.toLowerCase()
}

 

=> 코틀린은 자바처럼 this.nickname=nickname으로 바로 접근하지 않고 field라는 키워드를 사용
field는 Setter 메소드 내의 '값을 적용할 영역'을 의미한다. (프로퍼티의 이름을 사용하는 경우 자동으로 Setter 혹은 Getter가 호출되기 때문이다.)

 

[클래스 상속]

코틀린의 클래스는 기본적으로 상속이 불가능하다. 별도의 키워드(open)로 '상속이 가능'하도록 표시해야함 

open class FooOpenClass { 
... } 


또한 오버라이드 함수에 대해서는 override키워드를 사용해야한다.

override fun toStirng(): String { 
... }

[클래스의 가시성 변경자]

:클래스의 메소드 혹은 필드에 대해 접근을 허용하는지 결정하는 역할을 한다. (private, protected, default, public 등)
<Java>
변경자 : 의미
default(기본가시성) : 같은 패키지에서 접근 가능
private : 클래스 내부에서만 사용 가능하며 외부에 비공개
protected : 클래스와 상속받은 하위 클래스에서만 사용 가능
public : 외부에서 모두 접근 가능

<Kotlin>
변경자 : 클래스멤버 : 최상위 선언
interna l: 같은 모듈에서 접근가능 : 같은 모듈에서 접근가능
private : 클래스 내부에서만 사용 가능하며 외부에 비공개 : 같은 파일에서만 접근 가능
protected : 클래스와 상속받은 하위 클래스에서 사용가능 : 최상위 선언에서는 사용 불가
public(기본 가시성) : 모든 곳에서 접근 가능 : 모든 곳에서 접근 가능

Java와 달리 코틀린은 같은 패키지에서 접근가능한 default속성이 따로 없는 대신 같은 모듈일 때 접근 가능한 internal이 존재한다. 코틀린의 internal키워드는 Java에서 public으로 취급한다.

 

 

 

 

출처: 안드로이드 with Kotlin 앱 프로그래밍 가이드

'안드로이드' 카테고리의 다른 글

스플래시(Splash) 화면 만들기  (0) 2021.01.12
안드로이드_브로드캐스트 리시버  (0) 2021.01.11
안드로이드_서비스  (0) 2021.01.07
자바와 코틀린  (0) 2021.01.06
안드로이드_프래그먼트  (1) 2021.01.05