반응형

<자바 문법 및 특징>

1. 자바 특징

현실 세계의 객체를 필드와 메서드로 정의한 Class 기반으로 실제 메모리가 잡혀 만들어진 부품과 같은 객체들을 조합해

전체 프로그램을 완성해 나가는 개발 기법

  • oop : 객체 지향 언어 
  • 가비지 컬렉션에 의해 메모리 자동 관리
    • 시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원 회수하는 것
    • 시스템에서 가비지컬렉션을 수행하는 부분 : 가비지 컬렉터
  • 멀티 쓰레드 지원
  • JVM 위에서 동작하기 때문에 특정 OS에 종속적이지 않고 이식성이 좋으며 보안성이 좋다
  • 다양한 오픈 라이브러리들이 존재한
  • 추상화 :  객체의 공통적인 특징을 속성을 변수로 / 공통된 기능을 메소드로 만듬/일반메서드사용
    • 추상 메서드 : 메서드의 정의부만 있고, 구현부는 있지 않는 메서드
    • 추상 클래스 : 추상 메서드를 적어도 하나 이상 가지고 있는 클래스로 자식 클래스에서 오버라이딩(재정의)
                               필요한 추상메서드를 가지고 있기 때문에 객체화 할 수 없다.
  • 캡슐화 , 은닉화 : 외부 객체에서 구현 방식 알 수 없도록 숨기고 별도로 접근할 수 있는 getter/setter 메서드를 통해 접근하는 방식
  • 상속 : 부모 class를 자식이 접근할 수 있도록 물려 받는 방식
    • 변수와 메소드를 그대로 쓰므로 코드 중복을 줄이고
    • 객체 사용하는 클래스의 외부 관점으로 봤을 때, 묶어서 처리(upcasting)할 수 있으므로 효율적인 코드
  • 다형성 : 부모 class 타입으로 해당 부모를 상속받는 여러 자식 class를 대입하는 성질 
                  : 서로 다른 class로 부터 만들어진 객체이지만 같은 부모 class 타입으로 대입할 수 있는 성질
    • 오버로딩
      • 하나의 클래스 내에 이름이 같은 여러 개의 메서드 정의
      • parameter, return 타입 등이 다른데, 수행 내용이 본질적으로 동일 할 때 사용
    • 오버라이딩
      • 부모 클래스의 메소드를 자식 클래스에서 재정의

2. 객체와 클래스의 차이점

  • 클래스 : 현실 세계의 객체 속성과 동작을 추려내 필드와 메서드로 정의한 것 "아직 메모리가 할당되지 않은 상태"
  • 객체 : 클래스라는 설계도를 기반으로 실제 메모리가 잡힌 것을 의미,
                이런 객체를 조합해 전체 프로그램을 완성해나가는 방식 OOP

3. Servlet , JSP

  • Servlet : Container 가 이해할 수 있게 구성된 순수 자바 코드로만 이루어진 것(html in java)
  • jsp : html 기반에 java코드를 블록화하여 삽입 (java in html)

4. GET, POST

  • GET : 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용 
    • 보안성이 떨어지고 , 길이 제한이 있다
    • POST 보다 상대적으로 전송 속도가 post보다 빠름
    • 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩 되어 URL에 붙는다
  • POST : 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용
    • HTTP 메시지로 넘어온 엔티티를 새로운 자원으로 등록 : 201 response
    • 보안성이 높고, 속도가 get 보다 느리다
    • 객체들의 값도 전송 가능 
    • PUT(식별자 포함하여 웹 서버에 데이터를 전달)과는 비슷하게 작동

5. Call by reference , Call by value

  • Call by reference : 매개 변수가 원래 주소에 값을 저장
  • Call by value : 주어진 값을 복사하여 처리 

6. interface?

모든 메서드가 구현부가 없는 추상메서드, abstract 키워드 붙이지 않아도 자동으로 모든 메서드는 추상 메서드로 정의

  • 인터페이스는 추상화와 다르게 메서드 선언만 가능
  • 변수도 자동으로 final static 키워드가 붙는다. 

7. 접근제한자

  • public(접근 제한자가 없다/ 같은 프로젝트 내 어디서든 사용 가능 )
  • protected(같은 패키지 내, 다른 패키지에서 상속받아 자손 클래스에서 접근)
  • default (같은 패키지 내에서만 접근 가능)
  • private (같은 클래스내에서만 접근 가능)

8. 소켓 통신 (tcp/udp)

  • tcp (transmission control protocol)
    • 연결형 서비스 제공
    • 높은 신뢰성 보장
    • 데이터 흐름 , 호잡 제어
    • 3,4 -way handshaking(데이터 수신 여부 확인)
    • 전이중, 점대점 서비스
  • udp (user datagram protocol)
    • 비연결형 서비스 제공
    • 신뢰성 낮음
    • 데이터 전송 순서 바뀜
    • 데이터 수신 여부 확인 과정 없음
    • tcp 보다 전송 속도가 빠름

9. Primitive type , Reference type

  • Primitive type : 변수에 값 자체 저장
    • 정수 / 실수 / 문자 / 논리형
    • wrapper class (간단한 데이터를 객체로 만들어야 할 경우)를
      통해 객체로 변형 가능 (int, char 제외하고 다른 자료형들은 맨 앞 알파벳을 대문자로 바꿔준다)
  • Reference type : 메모리상에 객체가 있는 위치 저장
    • class , interface , array

10. 세션, 쿠키 사용 

  • Session : 웹 브라우저의 캐시에 저장(서버에 저장)되어 브라우저가 닫히거나 서버에 삭제 시 사라진다
                      쿠키에 비해 보안성이 좋다
  • Cookie : http 한계를 극복 / 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트를 매개 
                               아이디 , 비밀번호 / Client PC에 저장, 다른 사용자에 의해 임의 변경 가능 
  • 쿠키 대신 세션 사용하면 되는데 안하는 이유?
     -> 세션에 저장하면 서버의 메모리가 과도하게 사용되어 서버에 무리가 감

11. 해쉬, 암호화

  • 해쉬 : 단방향 암호화 / 복호화 불가능 / 데이터 보안에 중점
  • 암호화 : 양방향 암호화 / 복호화 가능 / 통신 보안 중점
    • Symmetric key (비밀키 : des / aes) / Asymmetric key(공개키 : dsa , rsa) 

12. HTTP (Hyper Text Transfer Protocol)

  • 웹브라우저와 웹서버가 서로 데이터를 주고 받을 때, 사용하는 규약
  • 도메인 + URL(자원 위치) , 도메인 + URI(자원 식별자) 통해 요청, 서버가 요청에 따른 응답(.html) 해줌
  • 특징
    • Connectless + stateless : 클라이언트 이전 상태 알 수 없으므로(쿠키와 세션 필요)
    • keep-alive : 지정된 시간 동안 연결 끊지 않고 연결된 상태 유지
      웹 서버 연결 -> html 문서 다운로드 -> 필요한 img , js, css 다운 -> 연결 끊음
  • http method 
    • GET : 정보를 요청하기 위해 사용 (READ)
    • POST : 정보를 입력하기 위해 사용(CREATE)
    • PUT : 정보를 업데이트 하기 위해 사용 (UPDATE)
    • DELETE : 정보를 삭제하기 위해 사용 (DELETE)
  • Request Header : 웹 브라우저가 웹 서버에 요청할 때 작성
    • 유저가 서버 측에 요청한 정보
  • Response Header : 웹 서버가 작성해서 웹 브라우저에 응답할 때 작성
    • 유저의 요청(request)에 서버 측의 응답(response)정보
  • https : http는 데이터 key와 , value 가 모두 표시되기 때문에 중요한 데이터 일 때 감춰야 함(HTTPS) 

13. REST API 

  • 서버에 리퀘스트 할 때, 자원의 ID와 자원에 대한 처리(HTTP 메소드)를 포함하여 리퀘스트 되도록 하는 것
  • 고유 자원에 대한 처리 URI로 나타낸 것
  • 라우터 상에서 HTTP 메소드 (GET, POST, PUT, DELEE) 와 실제 자원에 대한 처리 (CRUD)를 맵핑 시켜야함
  • HTTP method + 모든 개체 리소스화
    + URL 디자인(라우팅 :
    클라이언트 요청에 대한 응답을 어떻게 이어줄 것인가 처리 / 자원에 대한 처리를 주소에 나타내지 않는다. )

14. 아파치, 아파치 톰캣

  • 아파치 : HTTP 웹 서버(클라이언트의 요청을 기다리고 요청에 대한 데이터(정적 데이터)를 만들어서 응답하는 역할)
  • 톰캣 : WAS(Web Application Server/ 서블릿 컨테이너) : 웹 서버와 웹 컨테이너 결합
    • 다양한 기능을 컨테이너에 구현하여 다양한 역할을 수행
    • 웹 컨테이너 : 클라이언트의 요청이 있을 때, 내부 프로그램을 통해 결과를 만들어내고 이것을 다시 클라이언트에게 돌려줌
      • JSP, 서블릿 처리 / 서블릿 수명 주기 관리 / 요청 URL을 서블릿 코드로 매핑 / HTTP 요청 수신 및 응답 / 필터 체인
  • 둘의 차이 : 웹 서버와 웹 어플리케이션 차이-> 단순 정적 데이터 (이미지나 단순 HTML)를 처리하는 서버라면 아파치 
    -> 동적 데이터 (DB 연결, 데이터 조작) 등 과 같은 처리 는 WAS

15. 동기, 비동기 

  • 동기 (synchronous) 
    • 요청과 그 결과가 한 자리에서 동시에 일어남
    • A노드와 B 노드 사이의 작업 처리 단위(transcation)을 동시에 맞추겠다
    • 장점 : 설계가 매우 간단, 직관적 / 단점 : 결과가 주어질 때 까지 아무것도 못하고 대기해야한다.
  • 비동기 (asynchronous)
    • 요청한 그 자리에서 결과가 주어지지 않음
    • 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
    • 장점 : 결과가 주어지는 데 시간이 걸리더라도 그 시간 동안 다른 작업할 수 있으므로 자원을 효율적으로 사용
      단점 : 동기보다 복잡

16. 쓰레드 , 프로세스

  • Process : 운영체제에서 실행 중인 하나의 프로그램(하나 이상의 쓰레드 포함)
  • Thread : 프로세스 내에서 동시에 실행되는 독립적인 실행 단위 (stack메모리)
    • 장점 
      • 빠른 프로세스 생성
      • 적은 메모리 사용
      • 쉬운 정보 공유
    • 단점
      • 교착상태(다중 프로그래밍 체제에서 하나 , 그 이상의 프로세스가 수행 할 수 없는 어떤 특정 시간 /
                           하나의 메서드를 여러 개의 쓰레드가 한번에 사용하게 되면 데드락 발생)
  • Thread 와 Process 차이
    • 이 프로세스 내에서 실행되는 각각의 일을 스레드 
    • 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 됨
    • 자바에서 main()메서드를 수행하기 위한 목적으로 제공된다 하여 main 쓰레드라 불린다 
    • 서로 메모리 공간을 공유하지 못해, IPC(Inter process communication) 방식이 필요

17.자바의 메모리 영역(간단하게 설명)

  • 메서드 영역 : static 변수, 전역변수, 코드에서 사용되는 Class 정보 등.
    • 코드에서 사용되는 class들을 로더로 읽어 클래스별로 런타임 필드데이터, 메서드 데이터 등을 분류해 저장
  • 스택(Stack) : 지역변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리
  • 힙(Heap) : new 연산자를 통한 동작할당된 객체들이 저장되며, 가비지 컬렉션에 의해 메모리가 관리

 

18. 컬렉션 프레임워크 

다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화 된 방법을 제공하는 클래스 집합

즉, 데이터를 저장하는 자료 구조, 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현

인터페이스를 사용해 구현

  • List 인터페이스
    • 순서가 있는 데이터 집합, 데이터 중복 허용
    • vector , arraylist , linkedlist , stack , queue
  • Set 인터페이스
    • 순서가 없는 데이터 집합, 데이터 중복 허용 x
    • hashSet, TreeSet
  • Map 인터페이스
    • 키와 값의 한 쌍으로 이루어지는 데이터 집합, 순서가 없음
    • 키는 중복 허용 x, 값은 중복 가능
    • haspmap , treemap, hashtable, properties

19. 제네릭

코드 블럭 내부에서 쓸 자료형을 외부에서 지정하는 기법

하지 않으면, 원하지 않는 자료형이 입력되었을 때 오류를 컴파일 시점에 잡아낼 수 없다

클래스<사용할 타입>

 

20. 자바 재귀함수

자기 자신을 호출하는 함수 

원래 범위의 문제에서 더 작은 범위의 하위 문제를 먼저 해결함으로 원래 문제 해결 

꼭 재귀호출이 끝나는 종료 조건이 있어야 한다

 

반응형

+ Recent posts