자바

자바


1. OOP란?

  • Object-oriented Programing
  • 객체지향 프로그래밍
  • 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 객체로 파악하는 것
  • 해당 객체로부터 개발하고자 하는 특징과 기능을 뽑아와 프로그래밍 하는 것

장점

  • 코드에 대한 재사용이 용이하다
  • 유지보수가 용이하다
  • 객체단위로 코드가 나뉘어져 있어 디버깅이 유리하다
  • 클래스 단위로 모듈화가 가능하여 업무 분담이 유리하다

단점

  • 처리속도가 상대적으로 느리다
  • 객체가 많을수록 용량이 커질 수 있다
  • 설계 시 많은 시간과 노력이 필요하다
  • 객체가 상태를 갖기 때문에 변수가 존재하고, 변수를 통해 객체가 예측할 수 없는 상태가 되면 어플리케이션 내부에서 버그를 발생시킨다

특징

추상화

  • 공통의 속성이나 기능을 묶어 이름을 붙이는 것, 객체 지향적 관점에서 클래스를 정의하는 것
  • 필요한 정보만을 중심으로 간소화하는 것
    • 아우디, 벤츠라는 속성에서 자동차라는 공통된 속성을 추출, 간소화하여 하나의 집합으로 다루는 것

캡슐화

  • 정보 은닉 - 필요가 없는 정보는 외부에서 접근하지 못하도록 제한하는 것
  • 필요한 정보와 행동을 묶음과 동시에 보여줘야 할 것과 숨겨야 할 것으로 구분지음.
  • 데이터나 기능을 책임이 있는 객체에 그룹화 하는 것

상속성

  • 상위 개념의 특징을 하위 개념이 물려 받음.
  • 여러 객체에서 사용되는 기능을 하나의 클래스로 분리하여 사용, 코드의 재사용

다형성

  • 하나의 객체가 여러 형태를 띈다라는 의미. 상속받은 자식클래스들이 기능이 각기 다르다.
  • 객체간 관계를 디자인
  • 여러개의 자식클래스를 하나의 부모클래스로 통합 관리가 가능
  • 서로 같은 메세지를 받았을 때 각자의 방식으로 동작

2. 오버라이딩, 오버로딩이란

  • 오버라이딩
    • 런타임 타입 다형성
    • 상속받은 부모클래스의 메서드를 자식클래스에서 재정의해 사용하는 것
    • 상황에 맞게 메서드를 변경해 사용
  • 오버로딩
    • 컴파일 타입 다형성
    • 메서드의 이름은 동일하지만 매개변수의 개수나 자료형이 다를 경우 별개의 메서드로 인정하는 것

3. 자바의 특징

  • 운영체제에 독립적
    • JVM (자바가상머신 - 시스템 메모리를 관리하면서 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경 제공)에 동작하기 때문에, 특정 운영체제에 종속 되지 않음
  • 객체 지향 언어
    • 클래스와 객체를 사용하여 프로그램을 간결하게 구현 가능
    • 프로그래밍 하기 위해 여러 언어적 지원을 하고 있음
    • 캡슐화, 상속, 추상화, 다형성이 특징
  • 자동 메모리 관리 (Garbage Collection)
  • 네트워크와 분산환경 지원
  • 멀티쓰래드(동시사용가능) 지원
  • 동적 로딩(그때 그때 사용 가능) 지원
  • 오픈소스임

4. 클래스 VS 객체 VS 인스턴스

  • Class [클래스] - 객체를 정의해 놓은 것, 객체를 생성하기 위해 사용됨
  • Object [객체] - 실제로 존재하는 것, 사물 또는 개념
  • Instance [인스턴스] - 객체랑 비슷, 객체는 인스턴스를 포함하고 있음
    • 인스턴스화 - 클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화 라고 함 ex) Car a = new Car();
    • 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(객체) 라고 함

5. JDBC란?

  • Java Data Base Connection의 약자
  • JAVA언어를 통해 데이터 베이스에 접근 할 수 있는 프로그래밍을 의미

6. ARRAY VS LIST

  • Array
    • 선언시 배열 크기 지정이 필요하다. 예) String list = new String[7]
    • 객체를 넣을 때 인덱스 번호를 정의해야 한다. 예) list.add(‘book’)
    • 다차원 저장이 가능하다 (Multidimensional).
    • 선언시 메모리가 할당된다
    • 기본 데이터 타입(Primitive Type), 오브젝트 할당 가능하다
    • 접근이 빠르다 (인덱스 번호를 이용해 Random access를 하기 때문)
  • List
    • 사이즈 지정을 하지 않아도 동적으로 변화한다.
    • 그냥 넣어도 된다.
    • 다차원 저장이 불가능하다.
    • 오브젝트만 할당 가능하다
    • (* 기본 데이터 타입도 할당 가능한 것처럼 보이지만 실제로는 JVM에 의해 오브젝트와 되어 할당되는 것이다. 따라서 기본 데이터 타입만 들어가는 자료구조가 요구될 때에는 Array가 Arraylist보다 더 효율적이다.) 추가, 삭제가 빠르다 (포인터로 Sequential access를 하기 때문)

7. MAP VS Set VS LIST

  • List는 순서가 있는 데이터의 집합으로, 중복을 허용한다.
  • Set은 순서가 없는 데이터의 집합으로, 중복을 허용하지 않는다.
  • Map은 key와 value한 쌍으로 이루어지는 데이터의 집합으로 순서가 없다. 이 때 키는 중복을 허용하지 않는다.

  • List와 Set은 Collection 인터페이스를 상속받고 Map은 구조상의 차이로 인해 별도로 정의한다.

8. Queue와 Stack의 차이는?

  • Queue는 선형자료구조의 일종으로 FIFO(First In, First Out)구조를 가지고 있고, Stack은 LIFO(Last In, First Out)구조를 가지고 있다.