일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 유광버섯 통조림
- 일론머스크
- 원스휴먼 황금양털파밍
- 원스휴먼 스타크롬
- 2차계엄
- 1203계엄령
- 믹스커피
- 레시피 파밍
- 원달러환율
- 시그니처
- 홈플러스
- 비상계엄령
- 계엄령 외신반응
- 2차 비상계엄
- 커피추천
- 원스휴먼 황금양 구하기
- 원스휴먼 사료
- 믹스커피추천
- 원스휴먼 레시피 파밍
- 원스휴먼 먹이
- 원스휴먼 황금양
- 원스휴먼 동물
- 홈플러스 시그니처 모카골드믹스커피
- 원스휴먼 요리
- 원스휴먼 레시피
- 윤석열
- 국방부
- 원스휴먼 쿠폰
- 계엄령
- Today
- Total
0101011001010111
kotlin4-1 접근제한자 본문
접근제한자
: 변수나 메소드의 접근을 제한 할 수 있는 기능
ㄴ 객체를 이용해서 변수나 메소드를 호출 할 수 있는지의 여부를 접근이라고 합니다.
+) 우리가 인스턴스 만든 객체이름 변수.xxx 했던거 이런게 접근하는거다 ^ㅁ^ (껄떡껄떡)
일단 접근제한자는 접근범위가 범위로 나뉘기 때문에 범위로 알아야한다.
[프로젝트 / 모듈 / 패키지]라는게 나오는데,
이건 코틀린에서
이 Project를 누르고 보면 범위 확인이 좀 더 쉬워진다.
자, 그럼 강의로 돌아가서
[프로젝트 / 모듈 / 패키지] 에 대해 알아보겠다.
1.프로젝트
: 최상단 개념이고 <모듈,패키지,클래스>를 포함한다.
이런건 그림 그리면서 이해하는게 최고!
2.모듈
모듈이라는 것은 프로젝트 아래에 있는 개념이고, 패키지/ 클래스를 포함합니다.
우클릭해서 모듈이 생성가능한지 확인해보자.
최상단에 있는걸 우클릭해서는 만들 수 있지만, 하위에 있는 어떤걸 클릭해도 저 모듈이 나오지 않는다.
그러므로 강의 내용되로 최상단 (프로젝트) 바로 아래 위치하는 것이 모듈인 것을 한 번 더 확인 할 수있다.
ㄴ 직접 해봐야 머릿속에 잘 박힘.
3.패키지
: 패키지라는 건 모듈 아래의 개념이고 클래스를 포함한다.
ㄴ 패키지 안에 또 패키지를 만들 수도 있는 것을 확인했다!!!!!
(ㅎ1ㅎ1 이건 강의내용과 달리 내가 발견해서 기쁘다)
쫌 코틀린 고수폼 나지 않는가? ('ㅇ'캬하핳핳ㅎ핳ㅎ핳... 강의 정리로 돌아가겟다.)
패키지는 익숙할거다. // 이게 우리가 알고 있는 일반적인 디렉터리 라고 보면 되겠다.
Kotlin 접근 제한자의 종류
public: 명시하지 않으면 기본적으로 public 입니다 (어디서나 접근할 수 있어요)
private: 동일한 클래스 내부에서만 접근할 수 있습니다
internal: 같은 모듈 내부에서만 접근할 수 있습니다
protected: 기본적으로 private이지만 상속을 받은경우에 타 모듈에서 접근할 수 있습니다
ㄴ 이 부분은 쓸 때마다 찾아봐야 할 것 같다.
접근제한자가 필요한 이유.
1. 접근 권한을 통해 데이터에 대한 무분별한 접근 막을 수 있음.
2. 클래스간에 접근하면 안되는 상황을 구분하기 때문에 향후 유지보수가 용이
: 난 게임을 좋아하니 게임에 비유하자면, 만약 유저가 골드나 캐시포인트 같은것에 조작할 수 있게 접근이 되면 안된다. 예를들어 운영자 계정으로만 접근이 가능하게 만든다던지...
이 아이템은 어떤 던전에서만 쓸수있게 설정해 놓는다던지
접근제한자는 여러모로 유용한 기능일 것 같다.
접근제한자의 예제
먼저, AccessTestClass.kt를(클래스) 만들고, 다음과 같이 코드를 작성해보자.
class AccessTestClass {
public var a:Int = 1
var b = 2
private var c = 3
internal var d = 4
protected var e = 5
public fun publicTest() {
println("public 입니다")
}
fun publicTest2() {
println("public 입니다")
}
private fun privateTest() {
println("private 입니다")
}
internal fun internalTest() {
println("internal 입니다")
}
protected fun protectedTest() {
println("protected 입니다")
}
}
아니 티블로그 이거 코드로 어떻게 표시하는지 티블로그 어제 처음 시작해서 잘 모르겠음.......
코드 하나하나 살펴보기 ▼
여기서 public은 어차피 안쓸경우 기본값이 public이기 때문에 없어도 된다.
public: 명시하지 않으면 기본적으로 public 입니다 (어디서나 접근할 수 있어요)
private: 동일한 클래스 내부에서만 접근할 수 있습니다
internal: 같은 모듈 내부에서만 접근할 수 있습니다
protected: 기본적으로 private이지만 상속을 받은경우에 타 모듈에서 접근할 수 있습니다
ㄴ 권한 내용 다시한 번 복기!!
private var c = 3
c의 경우 private가 붙었다.
private: 동일한 클래스 내부에서만 접근할 수 있습니다
internal var d = 4
internal: 같은 모듈 내부에서만 접근할 수 있습니다
protected var e = 5
protected: 기본적으로 private이지만 상속을 받은경우에 타 모듈에서 접근할 수 있습니다
객체. xxx
하는게 접근이라고 했으니까 직접 실험을 해보자.
아까 만든 클래스 말고, Main.kt를 만들어, main함수를 작성해주자.
자 이렇게 실행할 경우, a,b,d만 나오는 것이 보인다.
왜 ?
public var a:Int = 1
a : public임 // 어디서나 접근 가능한 친구.
var b = 2
b : 앞에 아무것도 안쓸경우 public임. // 이친구도 어디서나 접근가능
internal var d = 4
d : internal // 같은 모듈 내부에서만 접근할 수 있습니다
자 이 파일의 구조를 보면 app이라는 모듈 안에 accessTestClass와 Main이 함께있음.
그렇기 때문에 같은 모듈 안이라 접근 가능한 것임.
private var c = 3
protected var e = 5
c,e가 안되는 이유?
- c : 동일한 클래스 내부에서만 접근할 수 있으므로 main에서는 접근할 수 없다.
- e : 상속을 받는다면 접근 가능하겠지만, 위 코드에서는 상속을 하지 않았기 때문에 private로 취급된다.
public: 명시하지 않으면 기본적으로 public 입니다 (어디서나 접근할 수 있어요)
private: 동일한 클래스 내부에서만 접근할 수 있습니다
internal: 같은 모듈 내부에서만 접근할 수 있습니다
protected: 기본적으로 private이지만 상속을 받은경우에 타 모듈에서 접근할 수 있습니다
위에 배운 4개 중 protected가 제일 헷갈릴텐데
(물론 나도... 어디서 상속을 받아야하는지, 누가 수퍼클래스고 서브클래스여야 가능한건지 개념이 안잡힘)
그래서 예제를 보자.
먼저 AccessTestChildClass.kt를 하나 만들자
그리고 이렇게 작성하고
class AccessTestChildClass: AccessTestClass() {
fun protectedTest1() {
println("e의 값은 ${e}")
}
}
class AccessTestChildClass: AccessTestClass()
이걸 보고 강사님은 class AccessTestChildClass는 AccessTestClass()를 상속 받으려 하고 있다고 말했다.
ㄴ ? 어딜 보면 그렇게 되는건데 ? (이해못함)
지난번 블로그 포스팅 한 것을 확인해 보니,
상속 받으려고 하는 애 ( 자식 이라고 부르기도하고 서브클래스 라고 부르기도 한다)
형식이
자식이 상속받는 방법:
class 자식() : 부모()
이런 형태로 상속을 받는다.
엄마한테 class 나() : 엄마() 라고 카톡을 보내고 open 해달라고 하면 ㅎ ㅔ..헤.....?
엄마미안
부모는 앞에 open!
이엇고... 쨋든
저건 자식 옆에 괄호가 없...는데 ?
일단 강의를 더 보도록하자
여기 괄호 잘못쓰셧나봄 쓱 지우심
나도 지우고 다시 따라가보기
자 오류 밑줄이 뜨는데
이렇게 뜬다.
자, 생각해보자
코틀린 입장에서는
AccessTestChildClass < 얘가 어이가 없을거다.
AccessTestClass는 쟤 부모가 아닌데 상속해달라고 징징거린다.
경고로 넌 부모 없자나 를 좋은 말로 표현해서
Make'AccessTestClass''open' 이라고 돌려말한다. (부모를 만들어오세용 고갱님 ^ㅁ^// 이런뜻)
부모없는 AccessTestChildClass에게 부모(수퍼클래스)를 만들어주자.
이 친구는 AccessTestClass를 부모로 두길 원한다.
그럼 간단하다.
AccessTestClass 클래스 들어가서
여기 표기해둔 맨앞에 open 이라고 적기만하면 된다.
자, 이제 부모가 되었으니, 아까 강사님이 지웠던 그 소괄호를 () 다시 넣자 ( 이걸 받아준다고 표현하시더라)
자, 이상태에서는 e를 쓸수 있다.
protected var e = 5
e는 protected
protected: 기본적으로 private이지만 상속을 받은경우에 타 모듈에서 접근할 수 있습니다.
여기까지 스무스하게 이해했다.
다음은 Main.kt에 다음 코드를 넣어 확인해보자.
fun main() {
var accessTestClass = AccessTestClass() <<얘는 이제 의미 없는 애가 됨.어디서도 안쓰임 지금
var accessTestChildClass = AccessTestChildClass()
// . 하고 접근가능한 요소를 확인
// accessTestClass.
accessTestChildClass.protectedTest1()
}
이런 결과 값이 왜 나오는지 이해하였다. 넘어가자
'Kotlin > 스파르타_코틀린 문법' 카테고리의 다른 글
Kotlin_4-5 널 세이프티 ? !! ?. ?: (0) | 2023.08.02 |
---|---|
kotlin4-4 지연 초기화 (0) | 2023.08.02 |
kotlin4-3 예외처리의 필요성 (0) | 2023.08.02 |
kotlin4-2 예외처리의 활용 (0) | 2023.08.02 |
3주차까지 내용은 이전 네이버 블로그에 정리 해 두었다. (0) | 2023.08.02 |