본문 바로가기

기술면접 준비

0816

OOP란 무슨 약자인지, 또 설명 해주세요. 

 

OOP란 Object-Oriented Programming(오브젝트 오리엔티드 프로그래밍)의 약자로

C언어같은 절차지향적인 프로그래밍이 아닌 객체지향 프로그램을 뜻 합니다.

(객체의 관점에서 프로그래밍 한다는 것)

 

객체지향 특징 네 가지 말해주세요 (간단히 설명도 해주세요)

객체지향의 네 가지 특징으로 캡슐화, 추상화, 다형성, 상속성(재사용)이 있습니다 

 

캡슐화란 데이터와 코드의 형태를 외부로부터 알 수 없게하고, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만듭니다

 

추상화란 클래스들의 공통적인 특성(변수,메소드)을 묶어서 표현합니다

 

다형성이란 형태는 같지만 다른 기능을 하는것을 의미합니다.

ex) 호랑이 클래스에서 "울음"을 고양이 클래스에서 상속 받는다면, 고양이 클래스에도 울음이 추가되지만

같은 "울음"이더라도 호랑이와 고양이의 "울음"은 다릅니다 이것을 "다형성"이라고 합니다

 

Overriding & Overloading

OOP에서 다형성의 개념을 녹여내는 방법은 두가지인데, 바로 오버라이딩(Overriding)과 오버로딩(Overloading) 입니다.

 

Overriding(오버라이딩)
부모 클래스에서 상속받은 자식 클래스에서 부모클래스에서 만들어진 메서드를 자식 클래스에서 자신의 입맛대로 다시 재정의해서 사용하는 것을 말합니다.

 

Overloading(오버로딩)
같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념

 

오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 갯수나 데이터 타입이 다르면 오버로딩이 적용

메서드 이름이 같아도 문법 에러 X

 

상속성이란 부모클래스에 정의 된 변수 및 메소드를 자식클래스에서 상속 받아 사용하는 것입니다.

 

StringBuilder, StringBuffer의 차이

Java 에서 문자열을 다루를 대표적인 클래스로 String , StringBuffer, StringBuilder 가 있습니다. 
가장 큰 차이점은 동기화의 유무로써 StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점(thread-safe) 입니다. 

(* 동기화 인터넷에 저장되어 있는 자신의 데이터 자료와 자신의 스마트폰 또는 컴퓨터의 자료를 서로 주고받아서 정보의 최신성을 동일하도록 만드는 것을 의미합니다.)

(* 멀티쓰레드란 일반적으로 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행하게 됩니다.

하지만 멀티 스레드(multi thread)란 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미합니다.)

(* thread-safe멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻합니다.)


참고로 String도 불변성을 가지기때문에 마찬가지로  멀티쓰레드 환경에서의 안정성(thread-safe)을 가지고 있습니다. 
반대로 StringBuilder는 동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 사용하는 것은 적합하지 않지만 동기화를 고려하지 않는 만큼 단일쓰레드에서의 성능은 StringBuffer 보다 뛰어납니다.


String                :  문자열 연산이 적고 멀티쓰레드 환경일 경우
StringBuffer     :  문자열 연산이 많고 멀티쓰레드 환경일 경우
StringBuilder   :  문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우