[Interview] 면접 관련 정리17
Java / Python
- Java
- 객체지향 언어
- 운영체제 독립적(JVM)
- 컴파일 언어
- 컴파일되면 결과를 확인할 수 있고, 코드를 수정해도 다시 컴파일 할 때까지 같은 결과를 나타낸다.
- Python
- 객체지향 언어
- 인터프리터 언어(스크립트 언어)
- 실행될 때 마다 바로 해석해서, 코드 변경 시 실행할 때 마다 결과가 계속 바뀐다.
차이
자바는 정적 타이핑 언어이고, 파이썬은 동적 타이핑 언어
변수 선언
자바는 변수를 사용하기 위해 데이터 유형을 선언해야 하는데, 파이썬은 변수 유형을 선언할 필요가 없으며, 런타임에 의해 유형이 결정된다.
// Java
public class Main {
public static void main(String[] args) {
int a=10, b=20;
int result = a+b;
}
}
# Python
a=10
b=20
print('resu;t a+b = ', a+b)
웹 표준
- 웹 표준
- 웹에서 표준적으로 사용되는 기술이나 규칙
- 표준화 단체인 W3C가 권고한 표준안에 따라 웹사이트를 작성할 때 이용하는 HTML, CSS, JS 등에 대한 규정이 담겨 있다.
- 어떤 OS나 브라우저를 사용하더라도 웹 페이지가 동일하게 보이고 정상 작동 해야함을 의미.
웹 표준이 있기 때문에 사이트를 만들 때 한 번만 작업해도 되고, 덕분에 노동력과 시간을 아낄 수 있다.
length / size
length
: 배열의 길이length()
: 문자열의 길이size()
: Collection Framework 타입의 길이
static
- static 키워드를 사용한다는 것은 메모리에 한 번 할당되어 프로그램이 종료될 때 해제되는 것을 의미한다.
- static 변수나 static 메소드는 프로그램이 시작 될 때 메모리에 올려져서 프로그램이 종료되기 전까지 GC에 의해 수집되지 않는다.
- 하지만 static 객체는 GC의 수집 대상이 된다.
특징
- GC에 수집 되지 않고, 프로그램이 종료될 때 까지 유지 되기 때문에 static 키워드를 많이 사용할 경우 메모리를 많이 차지할 수 있다.
- static은 전역에서 접근이 가능하므로 별도의 동기화 전략을 수립해야 한다.
- static 변수는 객체를 생성하지 않고 접근이 가능하다.
- static 메소드에서는 인스턴스 변수에 접근할 수 없다.
Library
소프트웨어 개발 시 사용되는 프로그램의 구성요소로, 특정한 기능들을 모듈화한 것.
플랫폼에서 바로 실행될 수 있는 형태로 제공(.jar)되며, 실제 실행되어 기능을 수행하는 단편화된 프로그램이라는 점이 API와 다르다.
- 표준 라이브러리 : 특정한 언어의 개발 환경에 기본적으로 포함된 것들은 대부분 표준 라이브러리라고 불린다.
- 기본적인 기능 수행과 더불어 디버깅, 성능측정 등을 위한 별도의 API가 존재한다.
- 런타임 라이브러리 : 프로그램이 실제 환경에서 실행되기 위해 필요한 모듈들이다.
- 대부분 표준 라이브러리에서 기능 수행에 필요한 것들만 제공되거나, 스크립트의 실행기 등을 말한다.
Maven / Gradle
- Maven
- 개발자가 사용할 라이브러리 뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리까지 관리하여 네트워크를 통해 자동으로 다운 받아준다.
- 프로젝트의 전체적인 라이프사이클을 관리하는 도구이며, 편리함과 많은 이점이 있어 널리 사용되고 있다.
- Gradle
- 기본적으로 빌드 배포 도구(Build Tool)이며, 안드로이드 앱을 만들 때 필요한 공식 빌드시스템이고, Java, C/C++, Python 등을 지원한다.
- Maven의 경우 XML로 라이브러리를 정의하고 활용하도록 되어 있으나, Gradle은 별도의 빌드 스크립트를 통하여 사용할 어플리케이션 버전, 라이브러리 등의 항목을 설정할 수 있다.
- 스크립트 언어로 구성되어 있기 때문에 변수 선언, if/for 등의 로직이 구현 가능하여 간결하게 구성 가능.
Gradle이 Maven보다 좋은점
- 동적인 요소를 XML로 정의하기에는 어려운 부분이 많다.
- 설정 내용이 길어지고, 가독성이 떨어진다.
- 의존관계가 복잡한 프로젝트를 설정하기에는 부적절.
- 특정 설정을 소수의 모듈에서 공유하기 위해서는 부모 프로젝트를 생성하여 상속하게 해야함(상속의 단점)
- Gradle은 Groovy를 사용하기 때문에, 동적인 빌드는 Groovy 스크립트로 플러그인을 호출하거나 직접 코드를 짜면 된다.
- Configuration Injection 방식을 사용해서 공통 모듈을 상속해서 사용하는 단점을 커버했다.
- 설정 주입 시 프로젝트의 조건을 체크할 수 있어서 프로젝트별로 주입되는 설정을 다르게 할 수 있다.
- Gradle은 Maven보다 최대 100배 빠르다.
앱 종류
Native App
- 흔히 자주 사용하는 어플리케이션.
- 모바일 기기에 최적화된 언어로 개발한 앱으로, 안드로이드 SDK를 이용한 Java 언어나 IOS 기반 SDK를 이용한 Swift 언어로 만든 앱.
장점
- 성능이 웹 앱, 하이브리드 앱에 비해 가장 좋음
- 네이티브 API를 호출하여 사용하므로 플랫폼과 밀착되어 있음.
단점
- 플랫폼에 한정적
- 언어에 제약적.
Mobile Web
데스크 탑 브라우저에서 실행되는 웹 어플리케이션을 모바일 스크린 크기로 줄여 놓은 것.
Web App
- Mobile Web + Native App
- 기존의 모바일 웹 보다 더 모바일에 최적화된 앱.
- 웹 앱은 SPA를 활용해 속도가 빠르다.
- Ex) Google Maps, 네이버 지도 페이지
장점
- 웹 사이트를 보는 것이므로 따로 설치하지 않아도 된다.
- 모든 기기와 브라우저에서 접근 가능
- 별도의 설치 및 승인 과정이 필요하지 않아 유지보수에 용이하다.
단점
- 플랫폼 API 사용이 불가하며, 오직 브라우저 API만 사용이 가능하다.
- 친화적 터치 앱을 개발하기 번거롭다.
- 네이티브, 하이브리드 앱 보다 실행이 까다롭다.(브라우저 검색)
Hybrid App
- Native App + Web App
- 네이티브 앱에 웹 view를 띄워 실행.
- Ex) KB 국민은행 앱
장점
- 양쪽의 API를 모두 사용할 수 있다는 것이 큰 장점
- 웹 개발 기술로 앱 개발 가능
- 한번의 개발로 다수 플랫폼에서 사용 가능
단점
- 네이티브 기능 접근을 위해 개발 지식 필요
- UI 도구를 사용 안하면 개발자가 직접 UI 제작
SPA
SPA(Single Page Application)는 단일 페이지로 기존의 SSR과 비교할 때, 배포가 간단하며 네이티브 앱과 비슷한 사용자 경험을 제공한다는 장점.
- SPA는 Web App에 필요한 모든 정적 리소스를 처음에 한 번 다운로드 한다.
- 페이지 간 이동 시, 페이지 갱신에 필요한 데이터만을 JSON으로 전달받아 페이지를 갱신하므로 전체적인 트래픽이 감소할 수 있다.
- 전체 페이지를 다시 렌더링하지 않고, 변경되는 부분만을 갱신하므로 새로고침이 발생하지 않아, 네이티브 앱과 유사한 사용자 경험을 제공할 수 있다.
- 필요한 모든 정적 리소스를 최초에 한 번 다운로드하기 때문에 초기 구동 속도가 느린 편이다.
- SPA는 서버 렌더링 방식이 아닌, JS 기반 비동기 모델(CSS)이다.
- 처음 받은 웹 페이지의 소스코드가 거의 비어있어 검색이 잘 안될 수 있지만, SPA는 웹 보다 앱에 더 적합한 기술이고, React나 Angular 등의 프레임워크는 SSR을 지원하는 SEO 기술이 이미 존재한다.
MPA
MPA(Multiple Page Application)는 Link Tag를 사용하는 전통적인 웹 방식이다.
- 새로운 페이지 요청 시 마다 정적 리소스가 다운로드 되고, 전체 페이지를 다시 렌더링하므로 새로고침이 발생되어 사용성이 좋지 않다.
- 페이지에서 필요 없는 부분을 포함하여 전체를 갱신하기 때문에 비효율적이다.
- 추후에 모바일 앱 개발 시 추가적인 백엔드 작업이 필요하기 때문에 개발 생산성이 좋지 않을 수 있다.
- SEO에 친화적이기 때문에 검색 사이트에 노출되는 것이 중요한 웹 사이트라면 MPA 구조로 개발하는 것이 좋다.
- 서버에서 이미 렌더링한 결과를 가져오기 때문에 SPA와 달리 첫 로딩이 짧은 편이다.
댓글남기기