티스토리 뷰

728x90

 

 

모의 면접을 정리하다가 모르는 부분을 튜터님께 질문하고 정리해보았다.

 

 

 

1. 클로저 (closure)

다른언어도 쓰기는 하지만 자바스크립트에서 사용되는 개념이다.

 

function number(){
	let num = 0;
	return function plus(){
    	return num++;
    }
}

 

number 라는 함수를 썼을 때 {} 안에 닫아주는 것이 closure 이다. 

클로저해서 닫혀있는 함수 내에서만 숨겨준거다. 데이터 접근에 대해 캡슐화를 시켜준다는 뜻이다. 객체를 따로 들어가서 접근해야한다. 

 

let gogocount2 = num++;
console.log(gogocount2); 
# 클로저로 닫아서 안나옴. 함수 안에서만 num 이 정의되어 있어서 num을 정의할 수 없어서 출력이 안됨
let gogocount = number();

console.log(gogocount());
# 이렇게 하면 number라는 함수 들어가서 num 을 출력해줌

 

 

Execution Context(실행 컨텍스트) / Lexical Environment (어휘적 환경) 같이 공부하면 좋다.

지역변수, 전역변수 같은 느낌으로 함수안에 함수를 클로저로 닫아서 정의해도 됨.. 꺼낼때는 첫번째 함수부터 꺼내야됨

 

 

 

 

 

 

 

 

2. 제너레이터 (Generator)

파이썬에서 이터레이터를 생성하는 함수이다. 이터레이터는 반복가능한 객체를 순회하면서 요소들을 하나씩 반환하는 객체이다.

제너레이터는 이터레이터를 만들기 위해 yield 키워드를 사용하여 값을 반환하는 함수로, 제너레이터 함수는 호출될 때 일련의 값을 반환하며, 각 값은 호출 사이에 상태를 유지합니다.

 

반복되는 숫자를 메모리공간을 아끼기 위해서 1에서 10만까지의 숫자를 다 저장하지 않고 함수만 가지고 있다가 필요한 수만 가지고옴

 

def number_generator():
	yield 1
    yield 2
    yield 3
    yield 4
    yield 5
    
for i in number_generator():
	print(i)
    
# 출력값
# 1
# 2
# 3
# 4
# 5

 

 

제너레이터 꼭 써야되나요?->아니요. 써야되는 상황에서는 써야하지만 꼭 써야할 필요는 없다.

과정은 반복되지만  숫자를 다 저장하지는 않는

for문을 쓰기에는 메모리가 많이 들고 반복은 해야되겠고 할 때 씀

 

 

 

 

 

3. 데코레이터 (Decorator)

평소쓰는 함수에서 추가적인 기능이 필요할 때 써서 함수를 확장시킨다. 

 

그러면 오버라이딩이랑 데코레이터 차이가 뭐죠?

데코레이터는 쓰던 기능에서 확장시켜 재정의를 하는 거고

오버라이딩(덮어쓴다)은 부모에서 자식으로 기능을 물려받았는데 내용이 바뀔수도 있고 확장할 수 도 있다.

 

오버로딩은 다른 개념: 읽는 개념. 파이썬에서는 안쓰고 c에서 쓰는 개념- 함수타입이 다른데 이름이 같은 함수가 있을 수 있다. 이름만 같고 타입만 다른거에서 원하는 타입을 가져올 수 있는 개념(int test()와 str test() 중에서 같은 이름에서 하나만 가지고 올 수 있다.)

 

꼭 데코레이터 가져오지 않아도 내가 다 짤 수 있으면 짜버려도됨

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

 

위 코드에서 my_decorator 함수가 데코레이터로 가져오는 함수이다. 이 함수는 다른 함수를 인자로 받아 래핑된 함수를 반환합니다. @my_decorator 구문을 사용하여 say_hello 함수에 데코레이터를 적용해 결과적으로 say_hello 함수를 호출할 때 추가적인 동작이 수행되는 것을 볼 수 있다.

 

 

 

 

 

 

 

4. 트랜젝션 (Transaction)

사용하는 이유가 무엇이냐 - 데이터베이스를 완전성을 유지하게 만들어주는 기술. 데이터베이스 상의 일련의 작업들을 하나의 논리적인 단위로 묶어서 처리하는 개념.

원자성, 일관성, 독립성, 지속성 네가지 성격( ACID 원칙 )이 있다.

 

원자성 - 부분적으로는 안되고 다 수행이 되어야함

일관성 - 실행하고 나서 디비 구조가 바뀌면 안됨 일관적인 형태를 유지해야함

독립성 - 트랜젝션이 여러개가 있는데 다른 트랜젝션이 끼어들면 안되고 

지속성 - 한번 성공 완료가 되면 영원히 디비에 반영이 되어야함-일시적 안됨!

 

디비조작하기에는 트랜젝션 꼭 써야함! 

creat 실패해도 일단 디비에 저장해뒀다가 나중에 구동?할 수도 있게 하는 트랜젝션

함수처럼 덩어리로 실행되어야 한다.

 

 

 

 

 

 

 

5. 도커 (Docker)

도커는 소프트웨어를 컨테이너화하여 애플리케이션을 개발, 배포 및 실행하는데 사용되는 오픈 소스 플랫폼으로 써야 편해짐

 

로컬에서는 만은 웹이 실행 되는데 배포하면 실행이 안될 때가 있다. 이때, 설치해서 사용해야 하는 것들 그림이나 여러가지 기술들 그걸 도커를 통해서 배포하면 따로 설치하거나 그러지 않아도 실행이됨! 

 

서버는 리눅스일 경우가 있는데 맥이나 윈도우에서 개발한 프로그램이 리눅스에서는 오류를 뱉어내거나 안돌아간다. 

그런데 그걸 해결하기 위해 도커가 필요함

컨테이너 가 도커안에 있는데 컨테이너는 배포할 환경을 만들어주는 공간

가상환경을 로컬에서 여러개 만들 수 있는 것처럼! venv1, venv2 만들수 있음 - 가상환경과 같지는 않음

배포할 공간을 여러개 만들어주는 것

 

++ 도커의 주요 특징과 개념은 다음과 같다:

  1. 컨테이너(Container): 도커는 컨테이너라는 격리된 환경을 제공. 각 컨테이너는 애플리케이션과 해당 의존성을 포함하며, 호스트 시스템과는 완전히 격리되어 있다.
  2. 이미지(Image): 도커는 이미지라는 패키지 형식을 사용하여 애플리케이션 및 해당 환경을 정의한다. 이미지는 컨테이너를 생성하는 데 사용.
  3. 이식성(Portability): 도커 이미지는 개발 환경, 테스트 환경, 운영 환경 등 어디서든 실행될 수 있다.
  4. 가상화(Virtualization): 도커는 가상화 기술을 사용하여 여러 애플리케이션을 단일 호스트 시스템에서 실행할 수 있다. 이는 하드웨어 자원을 효율적으로 활용
  5. 자동화(Automation): 도커는 컨테이너 기반의 애플리케이션 배포 및 관리를 자동화하는 데 도움이 된다. 이를 통해 배포 프로세스를 단순화하고 효율성을 향상

도커를 사용하면 개발자는 개발 환경을 쉽게 구축하고 애플리케이션을 빠르게 배포할 수 있다. 또한 마이크로서비스 아키텍처, CI/CD(Continuous Integration/Continuous Deployment), 스케일링 및 로드 밸런싱 등 다양한 환경에서 도커를 통해 애플리케이션을 효율적으로 관리할 수 있다.

 

 

 

 

 

 

 

++ 추가로 정적타입과 동적타입 - 언어의 특성을 봐야함

동적언어에서는 변수타입을 바꿀 수 있다. - 파이썬

 

c++이나 자바는 int number=0 이라고 하고 number='숫자' 라고 하면 뭐야?하고 변수로 못받음

파이썬은 number='숫자' 라고 해도 변수 받아먹음

파이썬은 잘 받아 먹지만 오류를 나중에 으앜 이상한거 먹었다 하고 뱉어냄 ㅜㅜ

c언어는 조금만 달라도 너 오류야 하고 알려줘서 정해져있음

 

반응형
반응형
TAG
more
최근에 올라온 글