1.  패키지

🚀  패키지는 클래스와 소스 파일을 관리하기 위한 디렉토리 구조의 저장 공간
      ✓ 현재 클래스가 어떤 패키지(디렉토리)에 있는지 표시
      ✓ 디렉토리가 계층 구조로 만들어져 있으면 점(.)으로 구분해서 각 디렉토리를 모두 나열해 줌

package 메인 디렉토리. 서브 디렉토리
class 클래스 {
}


🚀  이 디렉토리 구조라면 윈도우의 파일 탐색에서 보면 메인 디렉토리 아래에 서브 디렉토리가 있고, 서브 디렉토리 안에 실제 코드가 있는 클래스.kt 파일이 있음

🚀  하나의 패키지에 여러 개의 파일을 생성할 수 있기 때문에 '서로 관계가 있는 파일을 동일한 패키지로 만들어 두면 관리가 용이

 


2.  추상화

🚀  프로그래밍을 하기 전 개념 설계를 하는 단계에서는 클래스의 이름과 클래스 안에 있음 직한 기능을 유추해서 메서드 이름으로 먼저 나열. 이때 명확한 코드는 설계 단계에서 메서드 블록 안에 직접 코드를 작성하는데, 그렇지 않은 경우에는 구현 단계에서 코드를 작성하도록
메서드의 이름만 작성  ▶️ 이것을 추상화 Abstract 라고 하며 abstract 키워드를 사용해서 명시

 

  ✓ 구현 단계에서는 이 추상화된 클래스를 상속받아서 아직 구현되지 않은 부분을 마저 구현
  ✓ 다음과 같이 추상화된 Aniamal 클래스를 만들고 동물이 사용할 것 같은 기능 중 walk()와 move()를 설계한다고 가정

abstract class Animal {
    fun walk() {
        println("Walking")
    }

    abstract fun move()
}

 

  👾 walk는 명확하게 걸어가는 행위이지만 move는 어떤 동물이냐에 따라서 달라진다고 가정
  👾 이렇게 앞으로 상속받을 자식 클래스의 특징에 따라 코드가 결정될 가능성이 있다면 해당 기능도 abstract 키워드로 추상화
        ➡️  실제 구현 클래스는 이 추상 클래스를 상속받아서 아직 구현되지 않은 추상화되어 있는 기능을 모두 구현해 줌
  👾 추상 클래스는 독립적으로 인스턴스화 할 수 없기 때문에 구현 단계가 고려되지 않는다면 잘못된 설계가 될 수 있음

class Bird : Animal() {
    override fun move() {
        println("Bird move")
    }
}

 


3.  인터페이스

🚀 인터페이스 interface는 실행코드 없이 메서드 이름만 가진 추상 클래스. 즉, 누군가 설계해 놓은 개념 클래스 중에 실행 코드가 한 줄이라도 있으면 추상 클래스, 코드 없이 메서드 이름만 나열되어 있으면 인터페이스

🚀 인터페이스는 안드로이드에서는 주로 상속 관계의 설계보다는 외부 모듈에서 내가 만든 모듈을 사용할 수 있도록 메서드의 이름을 나열해둔 일종의 명세서로 제공

🚀 인터페이스는 interface 예약어를 사용해서 정의할 수 있고 인터페이스에 정의된 메서드를 오버라이드해서 구현할 수 있음
    ✓  코틀린은 프로퍼티도 인터페이스 내부에 정의할 수 있고, 추상 클래스와 다르게 class 키워드는 사용되지 않음

interface 인터페이스명 {
    var 변수 : String
    fun 메서드1()
    fun 메서드2()
}

 

 

1) 인터페이스 만들기

 

interface 예약어로 인터페이스를 정의
코틀린은 인터페이스 내부에 프로퍼티도 정의할 수 있음

interface InterfaceKotlin {
    var variable: String
    fun get()
    fun set()
}

 

 

2) 클래스에서 구현하기


인터페이스를 클래스에서 구현할 때는 상속과는 다르게 생성자를 호출하지 않고 인터페이스 이름만 지정해 주면 됨

class KotlinImpl : InterfaceKotlin {
    override var variable: String = "Default"
    override fun get() {

    }
    override fun set() {

    }
}

 

💡  인터페이스를 코틀린의 상속 형태가 아닌 소스 코드에서 직접 구현할 때도 있는데, object 키워드를 사용해서 구현해야 함
       ➡️  안드로이드 프로젝트에서 자주 사용하는 형태

val kotlinImpl = object : InterfaceKotlin {
    override var variable: String = "Default"

    override fun get() {

    }

    override fun set() {

    }
}

 

 

 

[ 내용 참고 : IT 학원 강의 ]


 

1.  외부 모듈의 이용

📁  외부 모듈은 다른 사람들이 만들어 배포하는 모듈을 말함

 

1) 패키지

    👾  모듈의 상위 개념으로 모듈의 집합을 의미
    👾  파이썬에서 기본적으로 제공하지 않더라도 외부에서 만들어진 패키지를 이용하면 패키지에 포함된 모듈을 사용할 수 있음


2) 패키지 관리자

    👾  외부 모듈을 사용하기 위해서는 우선 모듈이 포함된 패키지를 추가로 설치
    👾  pip라고 불리는 패키지 관리자를 사용해서 패키지를 추가, 삭제


3) 패키지 설치

💡  보통 관심있는 분야와 관련된 모듈을 검색해서 설치

       📌  맥os 에서는 터미널에 입력하여 설치

 pip install package


    👾  numpy 패키지수치해석과 통계에서 많이 사용

import numpy as np
print(np.sum([1, 2, 3, 4, 5]))  # 15

 


   

    👾  Beautiful Soup는 파이썬 웹 페이지 분석 모듈

# Beautiful Soup 모듈로 날씨 가져오기
from urllib import request
from bs4 import BeautifulSoup

# urlopen() 함수로 기상청의 전국 날씨 읽기
target = request.urlopen("http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108")

# 웹페이지 분석
soup = BeautifulSoup(target, "html.parser")

# location 태그 찾기
for location in soup.select("location"):
    # 내부 city, wf, tmn, tmx 태그를 찾아 출력
    print("도시:", location.select_one("city").string)
    print("날씨:", location.select_one("wf).string)
    print("최저기온:", location.select_one("tmn").string)
    print("최고기온:", location.select_one("tmx").string)
    print()
    
'''
도시: 서울
날씨: 구름많음
최저기온: 3
최고기온: 9

도시: 인천
날씨: 구름많음
최저기온: 2
최고기온: 8

도시: 수원
날씨: 구름많음
최저기온: 2
최고기온: 10
...생략...
'''

 

  📌  urllib는 URL 작업을 위한 여러 모듈을 모은 패키지 

  📌  태그를 여러개 선택할 때 select(), 한 개 선택할 때 select_one() 사용하여 값 추출

 


 

    👾  Django는 다양한 기능을 제공하는 웹 개발 프레임워크, Flask는 작은 기능만을 제공하는 웹 개발 프레임워크

pip install flask
from flask import Flask
app = Flask(__name__)

@app.rout("/")
def hello():
    return "<h1>Hello World!</h1>"
# @app.route() 는 데코레이터

 

# 맥 os 에서 Flask 코드 실행 방법
export FLASK_APP=파일 이름.py
flask run
# 터미널에 입력

 

    ⚡️  프로그램 종료할 때는 Ctrl + C


4) 패키지 삭제

pip uninstall package
ex. pip uninstall numpy

 


 

2. 라이브러리와 프레임워크

📁  라이브러리(library) : 정상적인 제어를 하는 모듈

📁  프레임워크(framework) : 제어 역전이 발생하는 모듈

    

1) 라이브러리

   - 개발자가 모듈의 기능을 호출하는 형태의 모듈

from math import sin, cos, tan, floor, ceil

 

2) 프레임워크

    - 모듈이 개발자가 작성한 코드를 실행하는 형태의 모듈 

         ex. Flask 모듈이 제공하는 명령어를 실행하면  Flask가 내부적으로 서버를 실행한 뒤 지정한 파일을 읽어 들여

               적절한 상황에 스스로 실행하게 됨

    - 개발자가 만든 함수를 모듈이 실행하는 것은 제어가 역전된 것

 


 

3. 데코레이터

 

1) 함수 데코레이터

⚡️  함수에 사용하는 데코레이터

       ➡️  대상 함수의 앞뒤에 꾸밀 부가적인 내용 혹은 반복할 내용을 데코레이터로 정의해서 손쉽게 사용할 수 있도록 한 것

# 함수 데코레이터 생성
def test(function):
    def wrapper():
        print("인사가 시작되었습니다.")
        function()
        print("인사가 종료되었습니다.")
    return wrapper
    
# 데코레이터를 붙여 함수를 만든다
@test
def hello():
    print("hello")
    
# 함수를 호출
hello()

'''
인사가 시작되었습니다.
hello
인사가 종료되었습니다.
'''

 

 

 

 

[ 내용 참고 : IT 학원 강의 및 책 '혼자 공부하는 파이썬' ]

+ Recent posts