IT 기술면접 질문들 - (1)
IT 기술면접 질문들, 심심할때 정리할 예정입니다.
https://mangkyu.tistory.com/88 참조했습니다!
OOP (Object-Oriented Programming) (ex. java, C++, C#, python)
데이터를 객체로 취급하여 프로그램에 반영한 것으로 절차지향 프로그램이 코드 순서대로 동작하는 것과 달리 객체와 객체의 상호작용으로 동작한다. 코드의 재사용성과 개발의 생산성이 높으며 유지보수가 편리하지만 속도가 느리고 설계/개발단계에서 많은 시간이 소요된다.
OOP 4가지 특성
추상화 : 공통의 속성이나 기능을 묶어 이름을 붙이는 것 캡슐화 : 비슷한 속성과 메소드를 하나의 클래스로 모은 것. 은닉화는 캡슐 내부의 로직이나 변수들을 감춰 객체가 손상되지 않도록 한다. 상속 : 자식 클래스가 부모 클래스의 멤버를 물려받는 것. 생산성을 높이고 유지보수에 편리 다형성 : 같은 모양의 함수가 상황에 따라 다르게 동작. 오버로딩과 오버라이딩으로 다형성을 이용할 수 있는데 오버로딩은 같은 함수 이름을 가졌지만 매개변수의 숫자나 타입을 다르게 해 구분하는 것. 오버라이딩은 부모 클래스에서 정의된 메소드를 자식 클래스에서 재정의 하는 것
OOP의 5원칙 (SOLID)
Single Responsibility Principle : 한 클래스는 하나의 책임만 진다.
Open Close Principle : 객체는 확장에는 열려있고 (Open) 변경에는 닫혀있어야 (Close) 한다.
Liskov’s Substitution Principle : 상위형 객체는 하위형 객체로 대체할 수 있어야 한다.
Interface Segregation Principle : 객체의 인터페이스는 하나로 통합된 것보다 여러개로 분리하는게 낫다. 사용하지 않는 메소드에 의존해선 안된다.
Dependancy Inversion Principle : 상위 클래스는 하위 클래스에 의존해선 안되고 하위클래스는 세부 사항에 의존해선 안된다. 클래스는 추상화에 의존해야한다.
call by value/reference
call by value : 원본과 다른 새로운 메모리 공간에 원본을 복사하는 것으로 복사본을 변경하여도 원본에 영향을 줄 수 없다. call by reference : 원본의 주소값을 넘기는 것으로 원본의 값을 변경할 수 있다.
RESTful API
RESTful API : REST 아키텍처의 제약 조건을 준수하는 애플리케이션 프로그래밍 인터페이스 REST(REpresentational State Transfer)ful API는 HTTP 통신에서 어떤 차원에 대한 CRUD 요청을 Resource와 Method로 표현하여 특정한 형태로 전달하는 방식입니다. RESTful API는 아래와 같은 것들로 구성됩니다.
Resource(자원, URI) Method(요청 방식, GET or POST 등) Representation of Resource(자원의 형태, JSON or XML 등)
함수형 프로그래밍
외부 값을 수정하거나 SIDE Effect 등의 부수 효과가 없는 순수 함수를 1급 객체로 간주하여 파라미터로 넘기거나 반환값으로 사용할 수 있으며, 참조 투명성을 지킬 수 있다. 1급 객체는 변수나 데이터 구조 안에 담을 수 있고 파라미터로 전달할 수 있고 반환값으로 사용할 수 있고 할당한 이름과 무관하게 고유한 구별이 가능 참조 투명성은 동일한 인자에 대해 동일한 결과 반환, 기존의 값을 변경하지 않고 유지. Immutable Data
메모리 구조
(낮은 주소)
코드 영역 (프로그램의 코드) 데이터 영역 (전역/정적 변수) 힙 영역 (런 타임에 크기가 결정됨, 프로그래머가 직접 관리할 수 있는데 이를 동적 할당이라고 부른다. 낮->높) 스택 영역 (컴파일 타임에 크기가 결정됨. 함수의 호출과 함께 할당되며 지역/매개 변수가 저장되는 영역. 스택영역 함수 호출 정보를 스택프레임이라 부르고 호출이 완료되면 소멸. 높->낮)
(높은 주소)
Parameter VS Argument
Parameter: 함수를 선언할 때 사용된 변수 / def process(par1, par2) Argument: 함수가 호출되었을 때 함수의 파라미터로 전달된 실제 값 / process(par1 = arg1, par2 = arg2)