절차지향 프로그래밍
프로그램을 일련의 순차적인 절차나 작업의 나열로 보고, 문제를 해결하기 위한 절차를 차례대로 실행하는 방식
객체지향 프로그래밍
프로그램을 객체라는 기본 단위로 구성하고, 이 객체들이 서로 상호작용하며 문제를 해결하는 방식
- 코드 재사용과 확장성: 객체지향은 코드의 재사용성과 확장성이 높지만, 절차지향은 상대적으로 낮음
- 유지보수: 객체지향은 유지보수가 용이하지만, 절차지향은 대규모 프로젝트에서 유지보수가 어려울 수 있음
- 적합한 프로젝트 유형: 절차지향은 작고 간단한 프로젝트에 적합하고, 객체지향은 복잡하고 대규모의 프로젝트에 적합
객체지향 프로그래밍의 4가지 특징
캡슐화(Encapsulation)상속(Inheritance)다형성(Polymorphism)- 추상화(Abstraction):
- 복잡한 실제 세계를 간단한 모델로 나타내는 과정
- 가장 관련이 깊은 정보만을 객체에 포함시키고, 불필요한 정보는 제거
Class
객체(Object)
- 객체란 어떠한 것, something.
- 어떠한 것에 대해 다른 사람에게 설명할 때, 어떻게 설명할 수 있을까?
- 상태
- 그것의 상태, 즉 정보
- 속성(attribute)로 표현
- 행동
- 그것의 행동, 즉 기능
- 메서드(method)로 표현
- 상태
파이썬에서의 객체
- 클래스(Class): 객체를 생성하기 위한 템플릿 또는 설계도. 속성(Attributes)과 메서드(Methods)를 정의한다.
- 인스턴스(Instance): 클래스에 정의된 구조로 생성된 실체
- class 생성
- name, age는 Person의 Attribute
- self : 인스턴스 자신을 참조하는 변수
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
- instance 생성
- __init__ 에서 정의한 Attribute들을 넣어줌
person1 = Person("Alex", 28)
person2 = Person("Jun", 17)
- method
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print(f"안녕하세요. 저는 {self.name}입니다. {self.age}살입니다.")
magic method
- __ 로 시작하고 끝나는 함수로, 파이썬의 내장 연산이나 함수를 객체에 적용할 때 자동으로 호출되어 객체의 내부적인 동작을 사용자 정의할 수 있게 해준다.
- __init__
- 객체가 생성될 때 호출된다.
- __str__
- print() 할 시 사용자에게 보여줄 형식을 지정한다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"이름: {self.name}, 나이: {self.age}"
person1 = Person("Alex", 28)
print(person1) # 이름: Alex, 나이: 28
상속
- 다른 클래스의 속성과 메서드를 물려받을 수 있다.
- super() 함수를 사용하여 부모 클래스의 메서드를 호출할 수 있다.
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age)
self.grade = grade
ken = Student("Ken", 20, 1)
print(ken) # 이름: Ken, 나이: 20
print(ken.grade) # 1
컴포지션
- 컴포지션(composition)은 "is-a" 관계인 상속과 달리, "has-a" 관계를 통해 한 클래스가 다른 클래스의 기능을 사용할 수 있도록 하는 기능이다.
- 상속이 클래스 계층을 통해 기능을 확장하는 방법을 제공한다면, 컴포지션은 객체의 조합을 통해 기능을 확장하거나 재사용합니다.
- 장점
- 유연성:
- 낮은 결합도
- 재사용성
class Job:
def __init__(self, name, pay):
self.name = name
self.pay = pay
class Address:
def __init__(self, street, city, zip_code):
self.street = street
self.city = city
self.zip_code = zip_code
class Person:
def __init__(self, name, address, job):
self.name = name
self.address = address # Address 클래스의 인스턴스
self.job = job # Job 클래스의 인스턴스
address = Address("Evergreen Terrace", "Springfield", "12345")
job = Job("Product manager", "1억")
bart = Person("bart", address, job)
웹개발에 대한 이해
웹개발이란? → 웹사이트를 만드는 것
web이란
- 월드 와이드 웹(World Wide Web, WWW, W3)은 인터넷에 연결된 컴퓨터를 통해 사람들이 정보를 공유할 수 있는 전 세계적인 정보 공간을 말한다.
- 인터넷에서 HTTP 프로토콜, 하이퍼텍스트, HTML형식 등을 사용하여 그림과 문자를 교환하는 전송방식을 말하기도 한다.
하이퍼텍스트
- 하이퍼텍스트(hypertext)란 문서 내부에 또 다른 문서로 연결되는 참조를 집어 넣음으로써 웹 상에 존재하는 여러 문서끼리 서로 참조할 수 있는 기술을 의미한다.
- 문서 내부에서 또 다른 문서로 연결되는 참조를 하이퍼링크(hyperlink)라고 부른다.
HTML
- 하이퍼 텍스트 마크업 언어(Hyper Text Markup Language, HTML)는 웹 페이지 표시를 위해 개발된 마크업 언어이다.
- 마크업 언어
- 태그 등을 이용하여 문서나 데이터의 구조를 명기하는 언어이다.
- 지금 보고 있는 Notion도 마크업 언어이다.
- 정적 웹페이지(Static Web Page)
- 서버에 미리 저장된 파일이 그대로 사용자에게 전송되는 웹페이지
- 사용자의 요청에 따라 변화하는 내용 없이, 모든 사용자에게 동일한 페이지를 보여준다.
- 동적 웹페이지(Dynamic Web Page)
- 사용자의 요청에 따라 서버 측에서 실시간으로 내용이 생성, 변경되어 제공되는 웹페이지
- 사용자의 입력, 시간의 경과, 데이터베이스 조회 결과 등에 따라 내용이 달라질 수 있다.
HTTP 프로토콜
- 프로토콜
- 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다.
- HTTP
- HTTP(HyperText Transfer Protocol)는 웹상에서 정보를 주고받을 수 있는 프로토콜이다.
- 클라이언트와 서버 사이에 이루어지는 요청/응답 프로토콜이다.
- 특징
비연결성(Connectionless)무상태(Stateless)- 클라이언트-서버 구조
- HTTPS
- Hyper Text Transfer Protocol Secure
- HTTP에서 보안이 강화된 버전이다.
클라이언트-서버 구조
- 클라이언트(Client)
- 서비스를 사용하고자 요청을 보내는 측이다.
- 웹에서는 크롬과 같은 브라우저
- HTML을 렌더링하여 보여준다.
- 서버(Server)
- 클라이언트의 요청을 받아 이를 처리한 후, 그 결과를 클라이언트에게 돌려주는 역할을 한다.
- HTML에서 사용할 데이터를 보내준다.
API
인터페이스
- 인터페이스(interface)는 서로 다른 두 개의 시스템, 장치 사이에서 정보나 신호를 주고받는 경우의 접점이나 경계면이다. 즉, 사용자가 기기를 쉽게 동작시키는데 도움을 주는 시스템을 의미한다.
- GUI
- GUI(Graphical User Interface)는 사용자가 그래픽 요소를 통해 컴퓨터와 상호작용할 수 있게 하는 사용자 인터페이스
- CLI
- CLI (Command Line Interface)는 사용자가 텍스트 기반 명령어를 입력하여 컴퓨터와 상호작용하는 인터페이스
API (Application Programming Interface)
- 소프트웨어 애플리케이션이 서로 상호작용할 수 있도록 하는 인터페이스
'천재교육' 카테고리의 다른 글
에듀테크 PM 프로덕트 매니저(13) (0) | 2024.03.15 |
---|---|
에듀테크 PM 프로덕트 매니저(12) (0) | 2024.03.13 |
에듀테크 PM 프로덕트 매니저(10) (0) | 2024.02.23 |
에듀테크 PM 프로덕트 매니저(9) (0) | 2024.02.22 |
에듀테크 PM 프로덕트 매니저(8) (0) | 2024.02.21 |