[기술 면접] OOP(객체 지향 프로그래밍)와 JAVA, 방법론


🥨 기술 면접 대비를 위한 공부..

안그래도 빠듯한 일정에 컨디션 난조로 3일을 날려먹었다. 바로 다음날이 면접인데 벼락치기라도 해야지.. 😭

첫 번째 장에서는 객체 지향 프로그래밍과 JAVA에 관련된 기본 개념? 들을 위주로 알아보겠다.


OOP(객체 지향 프로그래밍)

OOP란 Object-Oriented Programming의 약자이다. 객체들이 유기적으로 동작하는 프로그래밍 이론이다. 즉, 객체와 객체의 상호작용을 통해 동작한다.

  • 다형성: 하나의 메소드를 오버라이딩 하여 여러가지 기능으로 동작시킬 수 있음
  • 캡슐화: 데이터와 데이터 구조를 묶음으로써 외부에 데이터를 노출시키지 않은 데이터 은닉화가 가능함
  • 상속: 자식 클래스가 부모 클래스의 메소드를 상속받아 사용함으로써 코드의 재사용 가능
  • 추상화: 클래스에 대해 공통 속성이나 기능을 묶어 이름을 붙여, 객체지향 관점으로 봤을 때 추상화가 가능

Overriding vs Overloading

Overriding(오버라이딩): 상속에서 나온 개념으로 상위 클래스의 메소드를 하위 클래스에서 재정의 하는 것이다.

Overloading(오버로딩): 같은 이름의 메소드를 여러개 정의하는 것(생성자와 같이!)으로, 매개변수의 타입이 다르거나 그 개수가 달라야 한다.

MVC 패턴

객체 지향 프로그래밍에서 사용자 인터페이스를 효과적으로 데이터 모형에 관련시키는 방법론이다. 코드 재사용에 유리한 것은 물론, 개발에 소요되는 시간을 현저하게 줄일 수 있다.

Model: 논리적 데이터 구조를 표현

View: 사용자 인터페이스 내의 구성 요소를 표현

Controller: 모델과 뷰를 연결하고 있는 클래스를 대표, 클래스들 간의 정보 교환에 사용

Interface, Abstract

Interface

  • 추상 메소드와 상수만을 멤버로 가짐
  • 일종의 추상 클래스이며, Implements 키워드를 사용
  • 상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하도록 함
  • Interface는 다중 상속이 가능하다. (Extends는 하나의 클래스만 상속 가능)

Abstract

  • 추상 메소드를 하나 이상 가진 클래스
  • 자신을 생성자로 객체 생성 불가능
  • 하위 클래스를 참조하여 상위 클래스의 객체를 생성
  • 하위 클래스를 제어하기 위해 사용

GET, POST

GET: 주소 뒤에 이름과 값이 결합된 string 형태. 따라서 길이 제한이 있으며, Post 방식에 비해 속도가 빠름

POST: 서버로 보내기 전에 인코딩을 거치고, 서버에 전송된 후 디코딩 과정을 거치므로 보안성이 높다. 보통 브라우저에서 서버로 데이터를 전달할 때 사용한다.

Garbage Collection

시스템에서 더이상 사용하지 않는 동적 할당된 메모리를 자동으로 다시 사용 가능한 자원으로 회수하는 것.

Call by Reference vs Call by value

Call by Reference: 매개 변수의 원래 주소에 값을 저장하는 방식.

Call by value: 주어진 값을 복사하여 처리. 따라서 메소드 내의 처리 결과는 메소드 외부 변수에 영향을 미치지 않음

Static

클래스가 로딩될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미. 즉, 메모리 공간에 하나만 존재하며 어디에서든지 접근 가능. (전역 변수와 비슷)

*final: 변수를 상수화 시킴. 따라서 값 변경 불가능. 클래스의 경우 상속을 허용하지 않으며, final 메소드의 경우 오버라이딩을 허용하지 않는다는 의미

접근 제한자

public: 접근 제한 없음

protected: 같은 패키지 내 + 다른 패키지에서 상속받은 자식 클래스에서 접근 가능

default: 같은 패키지 내에서만 접근 가능

private: 같은 클래스 내에서만 접근 가능

프로세스와 스레드의 차이

프로세스는 OS로부터 자원을 할당받는 작업의 단위이다. 스레드는 할당 받은 자원을 이용하는 실행의 단위이고, 프로세스 내에 여러 개 생길 수 있다.

스레드의 경우 교착 상태에 빠질 수 있다.

Singleton Design pattern

인스턴스가 오직 1개 만 생성되어야 하는 경우에 사용되는 패턴으로, 해당 인스턴스에 대한 전역 접근을 제공한다.

이때, 동시성을 고려해서 설계해야 한다.

Refactoring

코드의 구현된 것을 건드리지 않은 상태로 코드의 유지보수성을 높이기 위해 내부 구조를 변경하는 것이다.

TDD

Test Driven Development의 약자로, 테스트 주도 개발을 의미한다. 반복 테스트를 이용한 소프트웨어 방법론으로, 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 작성하는 식으로 구현한다.

애자일 방법론중 하나인 eXtream Programming(XP)의 ‘Test-First’ 개념에 기반을 두어 단순 설계를 중시한다.

https://hahahoho5915.tistory.com/16




# 카테고리