반응형

JAVA

1. 기본형 변수 타입

  1 byte 2 byte 4 byte 8 byte
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

※ 1 byte = 8 bit

 

2. 인자(argument)와 매개변수(parameter)

 호출할때 "인자"를 전달 한다고 표현

 메서드를 만들때 "매개변수"를 지정했다고 표현

 

3. 오버로딩 VS 오버라이딩

 오버로딩 : 기존에 없던 새로운 메서드를 정의 하는것 (같은 메서드명, 다른 매개변수)

 오버라이딩 : 상속 받은 메서드의 내용을 변경하는것(메서드 재정의)

 

4. 추상클래스(abstract) VS 인터페이스(interface)

 추상 클래스 : 추상메서드가 하나이상 포함되어있어야함, 상속되어 구현되는것이 목적

 인터페이스 : 모든 메서드가 추상 메서드로 정의 되어있어야 함, 인터페이스를 구현한 객체들은 같은 메서드가 있다는 보장

 

5. 자바 에플리케이션 실행 과정

 자바 소스 코드 : 개발자가 Java로 작성한 소스 파일로 확장자 명은 .java

 자바 바이트 코드 : 클래스코드가 읽을 수 있도록 컴파일된 파일 확장자명은 .class

 Methode Area : 클래스가 사용되면 클래스별로 클래스 정보가 저장되는 영역(static 변수, static 메소드 등)

 Heap Area : 인스턴스가 생성되는 영역 (Garbage Collection의 대상이 되는 영역)

 Stack Area : 메서드 실행에 필요한 메모리 공간(매개변수, 지역변수, 리턴정보등 을 저장)

 PC Register : 현재 수행중인 JVM 명령어가 저장

 Native Method Area : 자바 외의 언어 (C, C++ 등)를 수행하기위한 영역

 

6. 가비지 컬렉션(Garbage Collection)

JVM에서 메모리를 관리해주는 모듈

Heap 메모리를 재활용 하기 위해 더이상 참조하지 않는 인스턴스들을 메모리에서 제거

개발자가 직접 메모리를 정리하지 않아도 됨

참조 되지 않는 객체를 찾는 과정에서 Mark and Sweep이 발생하여 스레드가 잠깐 멈춤

 

 

7. 객체 지향 프로그래밍

 현실 세계의 사물과 같은 객체를 만들고, 객체에 필요한 특징을 뽑아 프로그래밍을 수행

 특징

    - 추상화 : 객체들의 공통적인 특징(기능, 속성)을 도출하는 것

    - 캡슐화 : 실제 구현되는 부분을 외부에 드러나지 않도록 은닉

                    객체가 독립적으로 역할을 수행하도록 데이터를 하나로 묶어 관리 (응집도가 높아짐)

                    데이터를 보이지 않고 외부와 상호작용을 할 때 메서드를 이용 (결합도가 낮아짐)

    - 상속성 : 하나의 클래스가 가진 특징(함수, 데이터)을 다른 클래스가 그대로 물려받는것

    - 다형성 : 약간 다른 방법으로 동작하는 함수를 동일한 이름으로 호출하는것 (오버로딩, 오버라이딩)

 

 좋은 객체 지향 설계의 5가지 원칙(SOLID)
    - SRP 단일 책임 원칙 : 한 클래스는 하나의 책임만 가져야한다.
변경이 있을때 파급효과가 적으면 단일 책임 원칙을 잘 따른것 (객체의 생성과 사용을 분리)
※ 책임의 범위를 잘 조절해야함

    - OCP 개방 폐쇄 원칙 : 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야한다. (다형성)
역할과 구현을 분리, 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현하는것.

    - LSP 리스코프 치환 원칙 : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야한다.
다형성에서 하위 클래스는 인터페이스 규약을 다 지켜야 함. 컴파일은 잘 되더라도 규약을 위배하면 LSP 위반.
자동차 인터페이스의 엑셀은 앞으로가라는 기능, 뒤로가게 구현하게되면 LSP 위반, 느리더라도 앞으로가야함.

    - ISP 인터페이스 분리 원칙 : 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다.
자동차 인터페이스 -> 운전 인터페이스, 정비 인터페이스로 분리
사용자 클라이언트 -> 운전자 클라이언트, 정비사 클라이언트로 분리
정비 인터페이스 자체가 변해도 운전자 클라이언트에 영향을 주지 않음
인터페이스가 명확해지고, 대체 가능성이 높아짐

    - DIP 의존 관계 역전 원칙 : 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안된다.
스프링의 의존성 주입은 이 원칙을 따르는 방법중에 하나.
클라이언트 코드가 구현 클래스를 바라보지 말고 인터페이스를 바라보라는 뜻.
역할에 의존해야지 구현에 의존하지 말라는것.
의존 = 내가 그 코드를 안다.

 

 

8. 컬렉션 프레임 워크

8.2 Java 컬렉션 프레임워크 구조도

데이터 군을 저장하는 클래스를 표준화 한 설계

List  순서가 있는 데이터 집합, 데이터의 중복을 허용함
 ArrayList, LinkedList, Stack, Vector
Set • 순서를 유지 하지 않는 데이터 집합, 데이터 중복을 허용하지 않음
HashSet, TreeSet
Map 키와 값의 쌍으로 이루어진 데이터 집합, 순서유지가 안됨, 키는 중복이 불가, 값은 중복이 가능
HashMap, TreeMap, HashTable

8.2 List

순서가 있고 중복을 허용, 인덱스로 원소에 접근이 가능, 크기가 가변적

ArrayList

      ◦ 배열을 기반으로 데이터를 저장

      ◦ 단반향 포인터 구조로 데이터 순차적 접근에 강점

      ◦ 데이터 삽입, 삭제에 불리하나, 순차적 추가/삭제는 빠름

      ◦ 임의의 요소에 대한 접근성이 뛰어남

 LinkedList

      ◦ 연결 기반으로 데이터를 저장

      ◦ 각 요소(node)들은 자신과 연결된 다음요소에 대한 참조 주소값과 데이터로 구성되어있음

      ◦ 양방향 포인터 구조로 데이터 삽입, 삭제가 빠름

       임의의 요소에 대한 접근성이 안좋음

 

8.3 Set

 순서가 없고 중복된 데이터를 허용하지 않음, 중복되지 않은 데이터를 구할 때 유용, 빠른 검색 속도를 가짐

HashSet

      ◦ 인스턴스의 해시값을 기준으로 저장하기 때문에 순서를 보장하지 않음

      ◦ NULL 값을 허용
      ◦ TreeSet보다 삽입, 삭제가 빠름

LinkedHashSet 

      ◦ 입력된 순서를 보장

 TreeSet

      ◦ 이진 탐색 트리(Red-Black Tree)를 기반으로 함
      ◦ 데이터들이 오름차순으로 정렬
      ◦ 데이터 삽입, 삭제에는 시간이 걸리지만 검색, 정렬이 빠름

 

8.4 Map

Key와 Value의 한쌍으로 이루어지는 데이터의 집합. Key에 대한 중복이 없으며 순서를 보장하지 않음, 뛰어난 검색 속도

 HashMap
      ◦ Key에 대한 중복이 없으며 순서를 보장하지 않음
      ◦ Key와 Value 값으로 NULL을 허용
      ◦ 동기화가 보장되지 않음
      ◦ 검색에 가장 뛰어난 성능을 가짐
 HashTable
      ◦ 동기화가 보장되어 병렬 프로그래밍이 가능하고 HashMap 보다 처리속도가 느림
      ◦ Key와 Value 값으로 NULL을 허용하지 않음
 LinkedHashMap
      ◦ 입력된 순서를 보장
 TreeMap
      ◦ 이진 탐색 트리(Red-Black Tree)를 기반으로 키와 값을 저장
      ◦ Key 값을 기준으로 오름차순 정렬되고 빠른 검색이 가능
      ◦ 저장 시 정렬을 하기 때문에 시간이 다소 오래 걸림

 

9. HashTable

※ 해시함수(key) → 해시코드 Index   Value

검색하고자하는 key 값을 입력 받아 해시함수로 로직을 수행

반환된 해시코드를 배열의 Index로 환산하여 데이터에 접근 하는 자료구조

 

10. String, StringBuffer, StringBuilder

10.1 String VS StringBuffer, StringBuilder

String : 불변의 속성을 가짐

// ① 메모리 할당
String str = new String("hello");

// ② 기존 메모리가 아닌 새로운 메모리에 할당
str = str+" world";

 

 StringBuffer, StringBuilder

// ① 메모리할당
StringBuffer sb = new StringBuffer("hello");

// ② 기존 메모리에 append
sb.append(" world");

 

10.2 StringBuffer VS StringBuilder

StringBuffer : 동기화 키워드를 지원하여 멀티스레드 환경에서 안전함

StringBuilder : 동기화 지원이 안되지만 단일스레드 환경에서 성능이 좋음

 

11. 제네릭스(Generics)

 다양한 타입의 객체들을 다루는 메서드나 컬렉션에 컴파일 시 타입을 체크해주는 기능(JDK 1.5에 도입)

 타입의 안정성 제공

 타입체크와 형변환을 생략할 수 있어 코드가 간결해짐

 

12. CheckedException과 UnCheckedException

  CheckedException UnCheckedException
처리여부 개발 시 반드시 예외를 처리해야함 예외 처리를 강제 하지 않음
확인시점 컴파일 단계 실행단계(Run Time)
예외 종류 RunTimeExcepion을 제외한 모든 예외
SQLException
IoException
RunTimeException 하위 예외
NullPointException
IndexOutOfBoundException

 

13. int와 double, Integer와 Double등의 래퍼 타입과 Primitive 타입의 차이점

 Primitive 타입은 변수에 값자체를 저장하지만 래퍼타입은 변수에 객체의 주소 값을 저장

int에는 null을 넣을수 없지만 Integer는 객체이기 때문에 null 입력이 가능

Boxing : Primitive 타입을 래퍼타입으로 바꾸는것

UnBoxing : 래퍼타입을 Primitive 타입으로 바꾸는것

 

14. 익명 클래스와 람다 표현식의 차이

 익명 내부 클래스는 새로운 클래스를 생성하지만, 람다는 새로운 메서드를 생성하여 포함.
 내부 클래스는 새로운 클래스파일이 생성
 람다는 static 이든, 객체 사용을 위한 non-static 이든, 메서드로 생성.
익명 내부 클래스의 this : 새로 생성된 클래스, 람다의 this : 람다식을 포함하는 클래스

람다표현식이 클래스 정의와 구현을 동시에 하여 코드가 더 간결함

프로그램 내에서 한번 만 객체로 만드는데 클래스를 정의하고 생성하는 것이 비효율적 

 

15. 스레드를 생성하는 방법

 Runnable 인터페이스를 Implements 하여 run 메서드를 정의

Thread 클래스를 상속 받아 run 메서드를 오버라이딩

 

 

JSP

1. Servlet과 JSP, MVC

Servlet

 - 자바 소스코드에서 response로 PrintWriter객체에 HTML 소스를 삽입하여 response를 함

 - 웹페이지를 동적으로 생성하기 위한 서버측 프로그램

 - 자바를 기반으로 만들어지면 WAS위에서 컴파일되고 동작함

 

JSP

 - JavaServerPage의 약자로 HTML 소스에 스클립틀릿(<% ... %>)에 자바소스를 작성

 - 웹페이지를 동적으로 생성하기 위한 웹 어플리케이션 도구

 - Java 기반의 서버사이드 스크립트 언어

 ※ 스크립트 언어란 컴파일 없이 내장된 번역기로 실행할 수 있는 프로그래밍언어

 - JSP 컨테이너에서 서블릿을 생성하여 컴파일 후 실행하는 구조

 

MVC

 - Model View Controller : 하나의 서블릿이나, JSP로 처리하던 것을 컨트롤러(Controller)와 뷰(View)라는 영역으로 서로 역할을 나눈 것

 - 컨트롤러: HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행.  뷰에 전달할 결과 데이터를 조회해서 모델에 담음.

 - 모델: 뷰에 출력할 데이터를 담아서 뷰에 전달함. 따라서 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링 하는 일에 집중할 수 있음

 - 뷰: 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중. (HTML을 생성하는 부분)

 

 

2. EL과 JSTL

JSP 작성을 도와주는 언어와 라이브러리

EL

 - Expression Language

 - JSP에서 객체의 값을 쉽게 꺼내 쓸수 있는 도구

 - HTML : <span>${prod.no}</span>

 - Javascript : "${prod.no}"

 - 스크립틀릿안에서 값을 가져오고 할당할 필요가 없음

      <%=((Product)request.getAttribute("prod")).getNo()%>

 

JSTL

 - JSP Standard Tag Library

 - 일반적으로 JSTL + EL의 조합을 의미함

 - JSP에서 자주 사용하는 스클립틀릿을 하나의 태그로 묶은 라이브러리

 ex) <c:set>, <c:if>, <c:forEach> ...

 

※ <c:out> 태그를 쓰는 이유

- Cross-site Scripting 공격은 스크립트를 주입시켜서 사이트를 침입

- c:out 태그를 사용할 시에 이 HTML에서 사용하는 특수 문자를 HTML 엔티티로 변경해줌(escape)

- 크로스 사이트 스크립팅을 막아줌

반응형

+ Recent posts