개념정리

필기 시험 준비..

춘핑이 2023. 8. 24. 18:01

필기 시험 준비

한달전에 지원한 회사에 갑작스럽게 서류합격 연락이 왔고 필기시험과 코딩테스트시험을 보게 되었다.
차라리 말로 하는 것이라면 이해한 것을 어느정도 말할 수 있지만 떨어질 확률이 매우 매우 큰 것 같다.
그래도 준비를 하지 않을 수 없기에 어느정도 정리를 하고자 한다.
정처기 수준의 문제로 나오면 알 수 없다.(준비한적이 없기에) 면접 cs위주로 준비해보고자 한다.
너무 이런부분에 대해서 안일 했던 것 같다.
절반이상만 맞춰보자..

프로그래밍과 JAVA기본

1.프로그램이 무엇인가
프로그램 : 순서에 따라 명령어로 지정되어있어 컴퓨터가 처리해야하는 절차
프로그래밍 : 주어진 문제를 해결하기 위해 처리방법(문법), 순서 를 정하는 방법

2.JAVA언어의 장점
JVM위에서 돌아가기 때문에 특정 운영체제에 종속되지 않는다.
가비지컬렉터를 통해서 자동으로 메모리를 관리해준다.
객체지향프로그래밍 언어이다. 먼저 객체(부품)를 만들고 이 객체들을 서로 연결해서 프로그램을 완성하는 방법을 사용하는 언어이다.


라이브러리가 풍부하다.

3.객체 지향과 객체지향의 특징
객체 지향이란 프로그래밍에서 필요한 데이터를 추상화해서 상태와 행위를 가진 객체로 만들고 객체들을 서로 연결해서 로직을 구성하는 프로그래밍이다.
현실세계에서 부품들을 미리 만들어놓고 조립해서 제품을 만드는 것과 비슷하다.

추상화 캡슐화 상속 다형성
추상화는 객체들의 공통 속성이나 기능을 묶어 이름을 붙이는 것이다.
개 고양이가 있을때 운다와 같은 공통기능으로 동물 밑으로 넣는 것과 비슷하다.

캡슐화는 객체의 데이터(필드), 동작(메소드)을 묶어 하나의 캡슐안에 넣는 것이다. 외부에서는 객체를 필드와 메소드만으로 접근할 수 있고 객체가 손상되는 것을 막을 수 있다.

상속은 부모클래스와 자식클래스로 나누어져 자식클래스가 부모클래스의 필드와 메소드를 사용할 수 있게하는 것이다. 코드의 중복을 줄이고 재사용성을 높일 수 있다.

다형성은 사용방법은 동일하지만 실행결과가 다르게 나오게 하는 것을 말한다. 자동차의 부품을 교환하면 자동차의 성능이 다르게 나올 수 있는 것과 비슷하다. 이를 구현하기 위해서 오버로드와 오버라이딩을 사용한다.

4.오버로드와 오버라이딩
오버로드는 생성자, 메소드 등을 매개변수를 다르게 하여 상황에 맞게 사용할 수 있도록 하는 것이다.
오버라이딩은 자식클래스나 구현객체에서 메소드를 재정의하여 상황에 맞게 구현하는 것을 의미한다. 필요한 연산같은 것을 추가함으로써 다른 결과를 낼 수 있다.

5.객체 지향 과 절차지향의 차이
절차지향과 객체지향은 정반대의 의미라고 볼수는 없다. 절차 지향은 순차적 프로그래밍이고 작업 순서대로 코딩을 하게 된다. 함수단위로 구성되며 기능별로 묶어놓은 특징이있다.
객체지향은 클래스와 객체로 이루어져있고 클래스를 활용해 각각의 기능별로 구성한다. 클래스를 객체의 설계도라고 생각하면 될 것 같다.
코드를 재사용할 수 있다는 장점이 있다.

6.자바컴파일과정
컴파일러가 소스코드를 자바 바이트코드(class)파일로 변환 jvm이 이 바이크 코드를 컴퓨터가 알아들을 수 잇는 기계어로 변환해서 전달해서 실행한다.

7.인터페이스와 추상클래스
추상클래스는 class앞에 abstract 를 붙여서 만든다. 추상클래스는 상속을 위해 만들었기 때문에 new로 생성할 수 없다. 또한 다중상속이 불가능하다.
인터페이스는 상수와 추상메소드만을 가질 수 있다. 다중 구현이 가능하다.
공통점은 상속받거나 구현하는 클래스가 추상메소드를 구현해야한다는 것이다.
차이점은 추상메소드는 일반변수 생성자 일반메소드 추상메소드등을 모두 가질 수 있지만 인터페이스는 상수와 추상메소드만 가질 수 있다.
내가 이해한바로는 추상메소드는 클래스들의 공통적인 부분이 만들어졌을때 그것을 하나로 모아서 공통적인 기능을 정리하는 것이고
인터페이스는 먼저 기능을 만들고 그것을 구현하는 것이라고 이해하고 있다.

8.제네릭이란
결정되지 않은 타입을 파라미터로 처리하고 실제 사용할때 파라미터를 구체적인 타입으로 대체하는 긴능을 의미한다.

9.자바데이터타입
원시타입 : 변수에 값 자체를 저장한다. 정수형 실수형 문자형 논리형 등이 있고 스택메모리에 저장한다.
참조타입 기본형 외의 모든타입 이고 new로 정의하고 실제 값은 heap에 저장하고 스택에는 메모리 주소만 저장한다.

10.스레드란
프로세스(운영체제가 할당하는 하나의 업무 단위) 내에서 동시에 실행되는 독립적인 실행단위이다. 프로세스가 할당받은 자원을 활용하는 실행흐름단위이다.

11.스레드와 프로세스의 차이
프로세스가 하나의 업무단위라면 이 프로세스안에서 업무를 할당애서 각자 하는 것이 스레드이다.
예를들어 문서작성프로그램에서 문서를 작성하며 자동저장이 실행되면서 저장될 수 있다. 이것이 멀티스레드를 사용한 것이다.
만약 이것들을 모두 프로세스로 한다면 서로 데이터를 주고받는데 어려움이 있지만 스레드끼리는 데이터를 주고받기 쉽다.

12.접근제한자의 종류
public같은 패키지어디서나사용가능
protected 같은 패키지, 다른패키지는 상속일경우만사용가능
default 같은 패키지내에서만 접근가능
private 다른데서 사용불가 같은 클래스에서만 가능

13.자바메모리영역
메소드영역, 힙영역, 스택 영역이 있다.
메소드영역은 단순히 바이트코드파일을 읽은 내용이 저장되는 영역이다. 클래스별로 상수 정적필드 메소드 코드 생성자 코드들이 저장된다.
힙영역 힙영역은 객체가 생성되는 영역이다. 개겣의 번지는 메소드영역과 스택영역의 상수와 변수에서 참조할 수 있다.
스택영역은 매개변수 지역변수 함수 드잉 할당되는 LIFO방식의 메모리 이다. 사용이 끝나면 소멸하고 컴파일시 메모리를 할당한다.
메소드를 호출할때마다생성ㅈ되는 프레임이 저장되는 영역이다.

14.dao란
데이터베이스 접근을 위한 객체 이다. 데이터베이스를 접근하기 위한 로직과 비즈니스로직을 분리하기 위해 사용한다.
psmt등 JDBC에서 사용하는 코드들이 이런데 작성되는 것 같다.
마이바티스 코드들이 여기에 해당된다고 생각하면 될 것 같다.

15.DTO란?
각 계층간 데이터를 교환하기 위한 자바빈 이다. vo는 동일한 개념이지만 readonly의 개념을 가지고 있다.

16.배열과 리스트의 차이
배열은 크기 수정이 불가능하다. 하나의 타입만 저장할 수 있다.
리스트는 보통하나만 저장하지만 여러 타입을 저장할 수 있다. 가변적인 크기이다.

17.자바 컬렉션종류
list배열처럼 인덱스로 저장한다. 중복값이 저장하능하다.
set순서를 유지하지않는데이터의 집합이다 중복값을 저장할 수 없다.
map키와 값을 쌍으로 저장한다. 데이터의 집합으로 순서는 유지하지 않는다.

18.가비지컬렉터란
힙 영역에있는 가비지를 찾아내서 메모리를 회수하는 작업을 하는 것이다. jvm이 메모리를 할당받고 프로그램을 할당하다가 메모리가 부족해지면 알아서정리한다.

가비지란 정리되지않은 메모리 유효하지않은 메모리 주소등을 정리하는 것이다.

19.프레임워크란
소프트웨어를 만들때 뼈대가 되는 부분을 미리 구현한 크래스 인터페이스 메소드의 모음이다.
장점은 미리 구현해둔 코드로 빨리 만들 수 있고 품질이 보장되어 있고 사용하기 쉽다.
단점은 유연성이 부족하다.

20.스프링을 사용하는 이유
POJO의 구성만으로 설계가능하도록 되어있다. 순수 자바 코드를 의미한다. 프레임워크사요을 위해 따록 공부할 필요가 없다.
DI를 통해서 의존성주입을 해주기 때문에 객체관계를 구성해준다.
AOP를 지원한다. 관점지향프로그래밍으로 공통된 부분, 특정부분을 나누어 설계할 수 있다.
트랜젝션을 지원한다. 트랜젝션은 업무의 한단위로 스프링이 어노테이션이나 XML로 이를 정의할 수 있다.

21.exception
예외 프로그램의 비정상적인 흐름이 발생했을때 발생하는 것이다.
오류가 아니다. 예외이다.

22.OSI 네트워크 7계층
https://onecoin-life.com/19
이건 하루전에 봐야할듯