본문 바로가기
CS지식

[프로그래밍 언어] 프로그래밍 언어 기본 지식 및 면접 예상 질문

by Alkaloid 2022. 1. 22.
반응형
반응형
언어
   
  [아키텍처]
  //---------------------------------------------------------------//.
  아키텍처란 컴퓨터 시스템의 하드웨어 구조를 말한다.
  cpu나 기억장치, 입출력 장치등 컴퓨터를 구성하는 요소들에 전반적인 기계적 구조와 이를 설계하는 방법이다.
  //---------------------------------------------------------------//.
   
  [C와 JAVA]
  //---------------------------------------------------------------//.
  C와 JAVA의 가장 큰 차이는 절차지향인과 객체지향이라는 것이다.
  객체지향과 절차지향에 대한 설명은 밑에서 따로 정리할 것이다.
   
  C는 작동방식이 컴퓨터의 작업 처리 방식과 유사하기 때문에 객체지향의 언어보다 빠르게 처리된다.
  또한, 유지보수가 어렵고, 사용자가 직접 메모리를 조절하여 사용해야 한다.
   
  JAVA는 JVM위에서 작동하기 때문에 운영체제에 독립적이다.
  또한, GC으로 사용하지 않는 메모리를 자동으로 정리한다.
  캡슐화, 다형성, 상속등 특징이 있다.
  //---------------------------------------------------------------//.
   
  [절차지향 과 객체지향]
  //---------------------------------------------------------------//.
  절차지향은 순차적인 처리가 중요시 되며, 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다.
  컴퓨터와 작업 처리 방식이 유사 하기 때문에 빠르지만, 유지보수가 어렵고, 프로그램의 실행 순서가 바뀌면 동일한 결과를 보장받기 힘들다.
   
  객체지향은 실제 세계를 모델링 하여 소프트웨어를 개발하는 방법이다. 코드의 재사용성이 높고 절차지향보다 간편하다.
  하지만 처리속도가 절차지향에 비해 느리고, 설계에 많은 시간이 들어간다.
   
  객체지향에 3대 특성이 있다.
  캡슐화 : 정보은닉의 개념이 포함되어 있고, 속성(필드)과 행위(메서드)를 하나의 클래스라는 캡슐에 묶는 것이다.
  다형성 : 하나의 객체가 여러가지 형태를 가질수 있는 것을 의미한다. 오버로딩과 오버라이딩이 있다.
  상속 : 상위 클래스의 특성을 하위 클래스가 물려 받는것을 말하고 하위 클래스는 필요한 속성을 확장하여 사용할 수 있다.
   
  추가적으로 추상화가 있다.
   
  추상화 : 추상화는 모델링이며 구첵적인 것을 상세히 하지 않고, 필요성에 의해 특성만 가지고 구성하는것을 말한다.
  //---------------------------------------------------------------//.
   
  [오버로딩 과 오버라이딩]
  //---------------------------------------------------------------//.
  오버로딩 : 같은 함수의 이름여러개 정의하는것, 매개변수 타입과 리턴타입등 특징이 다른 여러개의 서브프로그램을 생성하는 것을 말한다.
  오버라이딩 : 부모 메소드에서 상속받은 메소드를 자식에서 재정의 하는것이다.
  //---------------------------------------------------------------//.
   
  [OOP]
  //---------------------------------------------------------------//.
  Object-Orient Programming의 약자이다.
  즉, 객체지향형 프로그래밍을 의미하는데, 모든 데이터를 객체로 취급하여 프로그래밍을 한다.
  순차적으로 동작하는 프로그래밍과는 다르게 객체와 객체의 상호작용을 통해 프로그램이 동작한다.
  //---------------------------------------------------------------//.
   
  [객체 와 클래스]
  //---------------------------------------------------------------//.
  객체 : 구현해야할 대상으로 식별이 가능한 모든 것이 객체이다.
  클래스 : 객체를 만들어 내기 위한 설계도 혹은 틀
  연관되어 있는 변수와 메소드의 집합
   
  객체를 나누는 기준?
  객체를 분류하는 기준은 타입이며, 타입을 나누는 기준은 객체가 수행하는 행동이다.
   
  인스턴스?
  소프트웨어 세상에 구현된 구체적인 실체로 객체를 소프트웨어 상에 실체화한것이다.
  //---------------------------------------------------------------//.
   
  [자바 동작원리]
  //---------------------------------------------------------------//.
  자바로 작성한 코드는 .java의 확장자를 가지고 있다. 자바는 javac라는 컴파일러가 .java로 끝나는 코드를 기계어로 변환한다.
  그러면 .java파일이 .class의 파일로 바뀌게 되고 이는 JVM을 통해 실행된다.
  //---------------------------------------------------------------//.
   
  [JVM 특징]
  //---------------------------------------------------------------//.
  OS에 구애받지 않고 프로그램을 실행할 수 있게 해준다. 그리고 메모리 관리 기법인 GC를 수행한다.
  //---------------------------------------------------------------//.
   
  [매개변수와 전달인자]
  //---------------------------------------------------------------//.
  매개변수 즉, parameter라고 한다.
  -함수를 선언할때 사용된 변수
   
  전달인자 즉, Argument라고 한다.
  - 함수가 호출 되었을때, 함수의 파라미터로 전달될
  //---------------------------------------------------------------//.
   
  [라이브러리 와 프레임워크]
  //---------------------------------------------------------------//.
  라이브러리 : 활용 가능한 도구의 집합을 말한다.
  개발자가 만든 클래스에서 호출하여 사용한다.
  프레임워크 : 뼈대, 기반구조로 여러 클래스나 컴포넌트로 구성이 되어있다.
  즉, 특정 문제를 해결하기 위한 클래스와 인터페이스의 집합
   
  차이점: 제어권(흐름)을 누가 가지고 있는지에 대한 차이가 있다.
  라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다쓰지만,
  프레임워크는 전체의 흐름을 스스로 가지고 있으며, 사용자는 그 안에서 코드를 짜 넣는다.
  //---------------------------------------------------------------//.
   
  [동적 프로그래밍]
  //---------------------------------------------------------------//.
  동적 프로그래밍 : 하나의 문제를 여러개의 작은 문제로 나누어 풀고, 결합하여 해결하는 방식이다.
  작은 문제가 다른 작은 문제를 해결하는데 사용이 될수 있기 때문에 여러번 계산하는것이 아닌,
  한번 계산을 하고 난 후, 재황용 하여 메모이제이션 기법으로 속도를 향상 한다.
   
  메모이제이션 : 동일한 계산을 반복해야 할 때, 이전 계산값을 저장하여 동일한 반복 수행을 제거하여
  프로그램 실행 속도를 빠르게 하는 기술이다.
   
  동적 프로그래밍의 조건
  1. 중복되는 부분 문제가 있어야 한다.
  2. 최적 부분 구조
  //---------------------------------------------------------------//.
   
  [동일성 과 동등성]
  //---------------------------------------------------------------//.
  동일성 : 인스턴스가 실제로 같은 인스턴스라는 것을 의미한다. (==)
  동등서 : 서로 다르 인스턴스 지만 가지고 있느 값이 같음을 의미한다. (equals)
  //---------------------------------------------------------------//.
   
  [length와 length()와 size()]
  //---------------------------------------------------------------//.
  length 는 배열
  length() 문자열 길이
  size()는 컬렉션 프레임워크 길이
  //---------------------------------------------------------------//.
   
  [클린코드]
  //---------------------------------------------------------------//.
  코드가 군더더기 없이 깔끔하고, 기능을 수행하는데 있어 적은 라인을 처리가 되어있는 코드.
  또한 직접적이고, 에러처리가 잘되어 있으며 하나의 역할을 수행한다.
  //---------------------------------------------------------------//.
   
  [c언어와 c++]
  //---------------------------------------------------------------//.
  C언어는 절차지향이지만 C++은 객체지향 언어이다.
  또한 C언어는 같은 이름의 함수가 존재할수 없지만, C++에서는 존재할 수 있다.(오버로딩,오버라이딩)
  C는 변수나 함수를 초기에 작성해 줘야하지만 ,C++은 그럴 필요가 없다
  //---------------------------------------------------------------//.
   
  [클래스와 구조체]
  //---------------------------------------------------------------//.
  구조체는 하나로 묶일 수있는 변수(데이터)의 집합이다. 하지만 클래스는 변수와 메서드(함수)의 집합이다.
  //---------------------------------------------------------------//.
   
  [컴파일언어와 스크립트언어]
  //---------------------------------------------------------------//.
  컴파일언어 : c,java,c++,c#..
  스크립트언어 : javascript,python..
   
  둘의 차이는 컴파일러가 있는지 없는지에 대한 차이가 있다.
  컴파일언어는 한꺼번에 해석을 하지만, 스크립트언어는 실행될때 바로 해석이 된다.
  //---------------------------------------------------------------//.
   
  [포인터]
  //---------------------------------------------------------------//.
  포인터 : 메모리의 주소를 저장하는 변수
  쉽게 설명을 하면, 엘레베이터에서 포인터는 해당 층을 가르키는 버튼이라고 생각하면 된다.
  포인터를 사용할때, 해당 포인터는 반드시 주소를 가르키고 있어야 한다.
  //---------------------------------------------------------------//.
   
  [call by value와 call by reference]
  //---------------------------------------------------------------//.
  call by value: 주어진 값을 복사하여 전달한다. 해당 함수를 빠져나가게 되면 기존 변수에 영향을 끼치지 않는다.
  call by reference : 주소값에 있는 값을 전달한다. 그렇기 때문에 함수를 나가도 값이 변화가 생긴다.
  //---------------------------------------------------------------//.
   
  [재귀함수]
  //---------------------------------------------------------------//.
  재귀함수 : 함수안에서 자기 자신을 호출하는 것을 말한다.
   
  소스코드가 간결해지지만, 연산 시간이 올래걸리고, 잘못 코드를 짜게 되었을때 무한 루프에 빠질수 있다.
  //---------------------------------------------------------------//.
   
  [어노테이션]
  //---------------------------------------------------------------//.
  사전적으로는 주석이라는 의미이지만 JAVA에서는 주석처럼 쓰여 특별한 의미나 기능을 하는 기술이다.
  예로) @OVERRIDNG
  //---------------------------------------------------------------//.
   
  [제너릭]
  //---------------------------------------------------------------//.
  제너릭은 타입의 안정성 맡고있다. 컴파일을 하는 과정에서 타입체크를 해주는 기능으로 객체의 타입을 컴파일시에
  체크 하기 때문에 객체의 타입의 안정성을 높이고 형변환의 번거로움을 줄인다.
  //---------------------------------------------------------------//.
   
  [느슨한 결합 과 강한 결합]
  //---------------------------------------------------------------//.
  결합도는 의존성을 나타낸다.
  즉 모듈이 다른 모듈에 대해 얼만큼의 정보를 알고 있는지에 대한 척도이다.
   
  느슨한 결합은 모듈간 필요한 정보만 알고있다면 두 모듈은 낮은 결합도를 가진다고 한다.
  강한 결합은 모듈간 자세한 부분까지 알고있다면 두 모듈은 강한 결합도를 가진다고 한다.
   
  개발시 강한 결합은 피하고 적절한 결합도를 유지하게 해야 한다.
  //---------------------------------------------------------------//.
   
  [static]
  //---------------------------------------------------------------//.
  static은 메모리를 한번 할당하여 프로그램이 종료될때 해제되는 것을 의미한다.
  모든 객체가 공유하는 메모리라는 장점이 있지만, 자주 사용하면 시스템 퍼포먼스에 악영향을 주게 된다.
  //---------------------------------------------------------------//.
반응형