본문 바로가기
코틀린 문법

1. 프로젝트 구조, 스코프-코틀린 5일차

by 농농씨 2023. 4. 4.

아... 첫 글인데 네이버 블로그에 써뒀던거 날아가서 팍식...

 

하지만 까먹엇으니 복습하는 셈 쳐야겠다. 아자자!

 

지금은 단순히 내가 공부한 흔적과 메모를 남기는 수준에 불과한 글만 올리고 있다. 

좀 더 익숙해지고 요령도 생기고 지식도 쌓이면 정보전달목적의 형식으로 다듬은 글을 올려볼 것이다.

 

코드테스트 사이트:play.kotlinlang.org

참조:유튜브 디모의 코틀린

 

기본 프로젝트 구조

//프로젝트:코틀린으로 어플리케이션을 짤 때 관련한 모든 내용을 담는 '큰 틀'
//모듈:하나의 프로젝트는 여러개의 모듈로 이루어질 수 있음. 만들거나 라이브러리.
// 하나의 모듈 안에 여러개의 폴더와 파일 있음. 모듈관련 설정이나 리소스파일 포함.
//프로젝트, 모듈, 폴더 및 파일이 물리적 구조 담당
//패키지(package)가 논리적 구조 담당
//패키지:소스코드 '소속' 지정하기 위한 논리적 단위
// ex.개발회사 도메인 거꾸로 배열하고 뒤에 프로젝트 명 붙이고 또 기능별세분
// com.youtube.dimo.kotlin.android
//how to 코드파일을 패키지로 묶나?
// A)코드파일 맨 윗줄에 packge 적고 패키지이름 쓰기
// !패키지 명시하지 않으면 자동으로 default패키지로 묶임!
//
//같은 패키지 내에서 변수,함수,클래스의 '이름만'불러도 쓸수 있다.
//패키지 다르면 import '외부패키지이름' 써주기
//만약 이름 중복되는 요소 있으면 풀네임 써줘야함 ex.com.youtube.dimo.A
//

package com.youtube.dimo

import com.youtube.kotlin

fun main() {
    val kotlin = "🙂"
    println(kotlin)
}

 

변수, 함수, 클래스의 접근범위와 접근제한자

//스코프:변수,함수,클래스(즉, 멤버들)의 공용범위를 제어하는 단위
//접근제한자:스코프 외부에서 스코프 내부로의 접근을 제어함
//스코프가 지정되는 범위:패키지 내부,클래스내부,함수 내부 등
//만약 패키지 안에 여러 멤버 있으면 그것들은 하나의 스코프 안에 있지만
//패키지 안의 함수 내에서도 변수, 함수 등이 하나의 스코프로 묶일 수 있음
//스코프 규칙 3가지
//1.스코프 외부에서는 스코프 내부의 멤버를 '참조연산자'로만 참조 가능
// ex.클래스 외부에서 인스턴스명의 참조연산자 사용하여 a.eat()처럼 쓴거기억
// +하나의 패키지에서 다른 패키지 내의 멤버 참조할 때도 import 또는
// 직접 참조연산자 사용하여(com.google.dimo.A 처럼) 참조한 것 기억
//2. 동일 스코프 내에서는 멤버들을 '공유'할 수 있다.
//3. 하위스코프에서 상위스코프의 멤버를 재정의할 수 있다.
// 원래 스코프의 같은 레벨에서는 같은 이름의 멤버 선언하면 안됨.
// 하지만 하위 스코프에서는 같은 이름 멤버 만들 수 있다!
//
//접근제한자:스코프 외부에서 스코프 내부에 접근할 때 그 권한을 
// '개발자가 제어'할 수 있는 기능,
// public, internal, private, protected가 있음
// 변수, 함수, 클래스 선언시 맨앞에 붙여 사용
// 기능 두가지
// in 패키지스코프,public-어떤 패키지에서도 접근 가능
// internal-같은 모듈 내에서만 접근 가능
// private-같은 파일 내에서만 접근 가능
// *protected는 패키지스코프에서 사용하지않음
// in 클래스스코프,public-클래스 외부에서 늘 접근 가능
// private-클래스 내부에서만 접근 가능
// protected-클래스 자신과 상속받은 클래스에서 접근가능 
// *internal은 클래스스코프에서 사용하지 않음

val a = "패키지 스코프" //변수 만듦

class B { //클래스 만듦
    val a = "클래스 스코프" 
    fun print() { //print라는 이름의 함수만듦
        println(a) //변수 a를 출력하는 기능
    }
}

fun main() { //메인함수 생성
    println(a) //변수a 그냥 출력함, 클래스 밖의 선언 참조>>"패키지스코프"
    B().print() //클래스 B의 인스턴스 만들어 print 실행함
    //변수 a는 클래스 B나 main함수에 속해있지는 않지만
    //동일한 스코프(변수 a선언부분부터~) 내에서 변수를 공유하여 사용함
    //클래스 안의 스코프를 참조함>>"클래스스코프"
   
}