ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개발자 인터뷰에 나올법한 용어 정리 - 2
    Computer Science/OS & Algorithm 2018. 5. 25. 01:19

    github 자료와 메모 자료들을 정리하던 도중, CS 관련 지식들을 정리해놓은 자료들을 발견했다.

    아주 기초적이고 쉬운 내용들이지만, 복습  블로그에 다시 정리하고자 한다.

     

    이번 블로깅은 IT 인터뷰에 나옴직한 용어들을 정리한 것이다. 이전에 개발직군 취업을 준비하면서 (물론 현재 하는 일과 직접적인 관련은 없지만) IT 관련 용어들을 정리한 적이 있는데, 그것을 바탕으로  글이다. 실제로 취업이나 인터뷰에 매우  도움이 되었던 것으로 기억하며, 현재 하는 일에서도 꽤나 자주 접하는 용어들이니 한 번 익혀두면 피와 살이 될 용어들이다. 더 많은 내용들이 있지만, 개인적으로 중요하다고 생각하는 내용들만 정리해보았다.


    이전 포스팅

     

     



     


    8. 다형성 


    영어로는 polymerphism. 여러 가지 형태를 가질  있는 능력. , 상속을 통해 기능을 확장하는 개념이다. 여러 가지의 형태를 가질  있는 능력을 말하며, 하나의 클래스가 다른 클래스나 인터페이스를 상속함으로써 여러 가지 형태의 내용을 가질  있기 때문에, 조상 클래스의 타입으로 자손의 인스턴스를 참조할  있다는 것이 핵심이다.  member라는 조상이 child, parent, teacher 로써 마구 활용되는 것을 생각해보면 쉽다. 다형성이 없다면 각각의 타입 케이스를 체크하여 코드를 짜겠지만, 다형성이 있음으로써 member라는 친구 하나만  움직여도 코딩이 원활해지는 .




     


    9. 캡슐화와 은닉화 


    은닉화는 private 으로 변수를 감추고 get/set(접근자함수) 함수로만 접근이 가능하게 하는것. 캡슐화는 정보가 은닉화된 상태에서 외부에서 그것을 사용하는 방법을 설정하는것.  은닉화는 캡슐화의 성질 때문에 발현되는 것이라고 볼수도 있다. 일종의 상위호환 개념이다.

     





    10. 0 False, 1 True.


    은근히 0과 1을 헷갈려하는 사람들이 많다.






     

    11. MVC 패턴 


    Model, View, Controller  가지 주체로 나뉘어 기능하게 하는 방법. 웹을 예로 들면, 유저는 컨트롤러를 통해 서버에 특정한 요청을 전달한다. 컨트롤러는 모델에게 뷰에서 필요한 데이터에 대한 manipulation 요청하고 모델은 그것을 한다.  결과는 뷰를 통해서 유저에게 전달된다. Model, View 서로 강한 의존성을 가지는 것이 단점.

     

    - MVP 패턴 : Model, View, Presenter  가지 주체로 나뉨. V -> P -> M -> P -> V 과정으로 이루어짐. View ,Presenter 강한 의존성을 가지는 것이 단점. 주로 안드로이드 개발에 사용되는 패턴.

     

    - MVVM 패턴 : Model, View, ViewModel. 있다는 것만 알아두자.





     

    12. 오버로딩 vs 오버라이딩 


    오버라이딩은 상속과 관련있는 개념으로, 상속받은 메서드를 재정의하는 것이다. 때문에 상위의 메서드의 내용으로 불리지 않고, 재정의된 메서드로 실행이 된다. 함수의 원형이나 파라미터 등은 그대로 유지하되, 내용만 달라지는 것이다.

     

    오버로딩은 상속과 관련이 없는 개념이며, 하나의 메서드를 여러가지 버전으로 만드는 것이다. 메서드의 이름만 동일하고 파라미터와 내용, 리턴 타입이 다른 메서드들을 만드는 것이다.

     





    13. 가비지 컬렉션을 쓰는것이 반드시 안좋은 것이 아니다 


    객체의 생성과 삭제마다 매번 할당과 할당 해제를 반복해주면 오버헤드가 발생할  있다. 만약 가비지 컬렉터를 사용하면  경우 오버헤드가 없어지고 때가되면 가비지들이 한번에 없어질 것이다.

     






    14. JIT(Just-in-time) 컴파일러 


    C C++에서 하는 것처럼 프로그램을 실행하기 전에 처음   컴파일하는 대신, 프로그램을 실행하는 시점에서 필요한 부분을 즉석에서 컴파일하는 방식을 말한다.

     

    보통 터프리터 방식의 언어 구현들이 성능 향상을 목적으로 도입하는 경우가 많은데, 같은 코드를 매번 해석하는 대신 실행하기 전에  부분만 컴파일을  두고 다음부터는 컴파일된 코드를 쓰기 때문에 인터프리터의 느린 실행 성능을 개선할  있다. JIT 이전부터 실행 성능 문제 때문에 바이트코드 컴파일을 도입했던 자바 같은 언어들도 바이트코드를 해석하는 대신 컴파일된 기계어 코드를 직접 실행하는 쪽이 어쨌든 빠르기 때문에 역시 도입하고 있다.

     

    - 인터프리터 vs 컴파일러 : 인터프리터는 휴먼 리더블한 코드로 쓰여진 명령문들을 읽어들여 즉독직해 해서 실행하는것을 말한다. 컴파일러는 코드로 쓰여진 명령문들을 바이트코드  컴퓨터가 사용 가능한 코드로 변환시켜주는 것을 말한다. 컴파일러 언어는 모든 코드를 한번에 번역한  실행하기 때문에, 번역의 속도는 인터프리터보다 느리지만 일단 한번 번역되면 그때그때 번역하는 인터프리터와는 차원이 다른 속도를 보여준다인터프리터가 편한 이유는 여기에 있다.  코드를 컴파일한뒤 기다려야만 오류발생 지점을 찾을  있지만, 인터프리터는 런타임에 바로 발생하므로 그때그때 그부분만 빠르게 고쳐주면 된다.

     




     

    15. 동적 타입 언어 vs 정적 타입 언어 


    실행중의 변수의 타입이 바뀔  있고, 실행 중에 변수의 타입이 결정되는 것이 동적 타입 언어이다. 정적 타입 언어는 자료형은 컴파일시에 결정해버리고, 캐스팅하지 않는  바뀌지 않는다. 그리고 타입이 맞지 않으면 컴파일 에러를 발생시킨다.

     

    개발의 편의는 당연히 전자가 좋지만, 동적 타입 언어는 런타임중에 갑자기 타입에러가 발생하는 등의 문제점이 생길 여지가 다분하다.

     

    - 동적 라이브러리와 정적 라이브러리의 차이점 : 동적 라이브러리는 라이브러리 코드가 외부에 존재하며, 실행시 이를 링크로써 읽어들인다. 반면 정적 라이브러리는 컴파일 타임에 라이브러리 코드를 실행파일로 복사하여 실행하게 된다.

     





     

    16. 프로그래밍 네이밍 : 파스칼 표기법(PascalName), 카멜 표기법(camelName)


    흔히 접하는 두 가지 방법이다. 언어와 도메인마다 네이밍 규칙이 전부 다르지만, 이정도는 알아야 한다.






    댓글

분노의 분석실 Y.LAB