Day 6 개발자필수지식

김의석·2024년 3월 15일
0

개발자필수지식

목록 보기
6/8

CI/CD(Continuous Integration/Continuous Deployment, Delivery)

개발자가 코드 작성 후 지속적으로 코드를 합치고 배포하는 과정

  • 왜? : 많은 개발자가 코드를 합치고 배포를 계속해서 시스템없이 수동으로 작업한다면 그 과정에서 다양한 에러가 발생하기 때문에

CI/CD 파이프라인

  • continuous integration

    • build
    • test : 함수 단위의 단위테스트, 모듈통합 시 통합테스트, 실제 서비스를 가정한 엔드투엔드 테스트가 있다.
    • merge : 작은 이슈 단위로 나눠서 merge 함. 작은 이슈 단위를 기반으로 merge 함
  • continuous delivery

    • 해당 레퍼지토리에 릴리스
  • continuous deployment

    • 이를 프로덕션, 즉 실제 서비스에 배포
  • 배포의 경우 서비스 배포와 더불어 내부적으로 QA엔지니어나 관리자 페이지를 위한 배포, 데이터웨어하우스로부터 데이터를 가공해서 백엔드 개발자를 위한 패포를 포함함(참고)

  • 파이프라인의 장점

    • 체계적인 코드배포 과정과 테스트가 강제된다는 점. 테스트가 있기 때문에 테스트가 없으면 코드 자체가 merge되지 않음.

클래스와 인스턴스

클래스

  • 객체를 만들어 내기 위한 틀, 만들어낼 객체의 속성(멤버변수)과 메서드(멤버함수)의 집합
class Dog:
    def __init__(self, name, age): # 멤버 변수
        self.name = name
        self.age = age

    def bark(self):                # 멤버 함수
        return "Woof!"

객체

  • 클래스로부터 만들어지는 실체, 클래스로 선언된 변수를 객체라고 함
my_dog = Dog("Buddy", 3)
your_dog = Dog("Max", 5)

# 인스턴스 속성 접근
print(my_dog.name)  # 출력: Buddy
print(your_dog.age)  # 출력: 5

# 인스턴스 메서드 호출
print(my_dog.bark())  # 출력: Woof!

인스턴스

  • 객체가 메모리에 할당이 된 상태 = 객체와 같은 의미로 쓰임

Static

  • 클래스에 속하며, 클래스의 변수, 메서드 등을 공유
  • 해당 클래스로 만들어지는 객체사이에서 중복되는 메서트, 속성을 효율적으로 정의
class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def bark(self):
        return "Woof!"

    @staticmethod   # 클래스 내에서 static 키워드로 선언
    def info():
        return "This is a dog class. It provides methods to interact with dogs."

# 클래스를 이용하여 인스턴스 생성
my_dog = Dog("Buddy", 3)
your_dog = Dog("Max", 5)
  • 클래스의 객체들끼리 사용되는 메서드 또는 속성 이라는 것을 나타내는 명시성이라는 장점이 있다.

단점

  • static 선언과 동시에 heap이 아닌 method area 메모리 영역에 할당되어 프로그램이 종료될 때 까지 GC에 의해 메모리가 회수되지 않기 떄문에 만약 클래스가 객체로 쓰이지 않는다면 메모리 낭비가 될 수 있다.

오버로드와 오버라이딩

오버로드

class Calculator:
    def add(self, a, b):     # 매개변수 2개
        return a + b

    def add(self, a, b, c):  # 매개변수 3개 
        return a + b + c
  • 클래스 내 함수의 이름이 같아도 매개변수, 타입, 순서를 다르게해서 같은 이름으로 여러개의 함수를 정의할 수 있는 것.
  • 프로그램 유연성을 높이며 같은 클래스 내에 사용된다.
  • 파이썬에서는 메서드 오버로딩이 직접적으로 지원되지 않는다.

오버라이딩

class Animal:        # 부모클래스
    def speak(self):
        return "Animal speaks"

class Dog(Animal):   # 자식클래스, Animal 클래스 상속
    def speak(self): # speak 함수 재정의 "Woof"
        return "Woof!"

class Cat(Animal):
    def speak(self):
        return "Meow!"

# 인스턴스 생성
animal = Animal()
dog = Dog()
cat = Cat()
  • 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의를 하는 것.
  • static, final로 선언한 메서드는 오버라이딩 불가

추상화

데이터 추상화

  • 복잡한 데이터, 구조, 시스템을 핵심만을 가려내 덜 복잡하게 만드는 것
class BankAccount:
    def __init__(self, account_number, balance):
        self._account_number = account_number
        self._balance = balance

    def deposit(self, amount):         # 입금액 함수 
        self._balance += amount

    def withdraw(self, amount): 	   # 이체 함수
        if self._balance >= amount:
            self._balance -= amount
        else:
            print("Insufficient funds")

    def get_balance(self):            # 위 두함수의 핵심인 잔돈을 get_balance로 추상화 함
        return self._balance
  • 공통점은 모으고 차이점은 제거한다.
  • 부모 - 자식 클래스에서도 부모 클래스에서 추상화 가능

프로세스 추상화

  • 어떠한 내부 프로세스를 숨기는 것
  • 예시 : 데이터베이스 내부 프로세스를 알지 못하지만 단순하게 insert, usert 등의 쿼리로 데이터에 저장할 수 있다.
profile
널리 이롭게

0개의 댓글

관련 채용 정보