CI / CD
Continuous Integration / Delivery & Deployment
지속적으로 코드를 합치고, 배포한다.
Delivery = git 같은 곳에 merge하는.
Deployment = 실제 서비스 배포.
이 파이프라인이 주는 장점은 코드 배포까지 좀 더 체계적으로 만들어주고 테스트가 강제된다. (테스트 코드가 작성이 안되었다면 Merge 자체를 막는.)
배포는 그저 사용자를 위한 서비스를 배포한다고 생각할 수 있지만 그 뿐 아니라 내부적으로 QA 엔지니어나 관리자 페이지를 위한 배포, 데이터 웨어하우스로부터 데이터를 가공해서 백엔드 개발자를 위한 배포 등을 포함한다.
Q. 클래스와 객체와 인스턴스의 차이는?
클래스
클래스는 객체를 만들어 내기 위한 틀이며 만들어 낼 객체의 속성과 메서드들을 담아 놓은 것이다.
객체
객체란 클래스로부터 만들어지는 실체, 클래스로 선언된 변수를 객체라 한다.
인스턴스
인스턴스란 객체가 메모리에 할당이 된 상태이며 런타임에 구동되는 객체를 뜻한다. 객체와 같은 의미로 쓰이기도 한다.
AWS의 클라우드 가상서버를 의미하기도 한다.
Q. static 키워드는 왜 사용하며 단점은 무엇인가?
왜?
클래스의 인스턴스가 아닌 클래스에 속하며 클래스의 변수, 메서드 등을 공유하는데 사용된다. 이를 통해 해당 클래스로 만들어지는 객체 사이에서 중복되는 메서드, 속성을 효율적으로 정의할 때 쓰인다.
Ex) Person 클래스의 Talk 메서드가 있다하면 사람들 사이에서 Talk는 객체 마다 Talk 메모리 할당할 필요 없이 Class당 Talk 하나만 있어도 되므로 이럴 때 static 키워드를 사용한다.
1
2
b.talk(b,a); 를 쓸거냐,
Person.talk(b,a); 를 쓸거냐. //static
메모리 효율성이 증가한다.
단점
static 키워드로 선언하자마자 메모리에 올라감.
해당 메서드 등을 사용하지 않아도 메모리에 올라가있기 때문에 낭비가 된다.
Q. 오버로딩과 오버라이딩이란?
오버로딩
오버로딩은 이름이 같아도 매개변수 개수, 타입, 순서를 다르게 해서 같은 이름으로도 여러개의 함수를 정의할 수 있는 것을 말한다.
이는 프로그램의 유연성을 높이고 결과적으로 코드를 깔끔하게 하는 효과가 있다. 같은 클래스 내에서 사용한다.
1
2
3
4
5
6
7
8
9
double multiply(double a, double b)
{
return a * b;
}
int multiply(int a, int b, int c)
{
return a*b*c;
}
오버라이딩
상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의 하는 것을 말한다. 상속관계 클래스에서 사용되며 static, final로 선언한 메서드는 오버라이딩이 불가능하다.
1
2
3
4
5
6
7
8
class Animal{
void eat(){~~}
}
class Person extends Animal{
@Override
void eat(){사람처럼 먹는다}
}
** extends vs implements
extends는 일반 클래스와 abstract 클래스 상속에 사용되고, implements는 interface 상속에 사용된다.
implements한 클래스는 implements의 내용을 모두 사용해야 한다.
Q. 추상화란 무엇인가?
프로그래밍에서의 추상화는 복잡한 데이터, 구조, 시스템 등으로부터 핵심만을 가려내 덜 자세하게 만드는 것 또는 세부사항, 절차 등을 감추고 인터페이스 등을 만드는 것으로 복잡도를 낮추는 방법을 말한다.
데이터 추상화
어떠한 데이터들의 공통점을 모으고 차이점은 버린다.
예를 들어 고양이, 강아지, 원숭이 등의 객체들의 공통적인 특징을 묶어 동물이라는 카테고리로 카테고리화 시킨다.
프로세스 추상화
어떠한 내부 프로세스를 숨기는 것을 말한다. 예를 들어 우리는 DB가 어떻게 데이터를 저장하는지는 모르지만 단순하게 insert, update 등의 쿼리로 데이터를 저장할 수 있다.