반응형
객체지향(OOP - Object Oriented Programming) 이란?
- OOP는 프로그래밍 패러다임 중 하나로 수많은 객체들간의 상호작용으로 하나의 프로그램을 완성해나가는 프로그래밍을 의미한다.
- 현실세계에 존재하는 사물을 모델링하여 클래스 자료형 작성 후 객체(Object)를 생성한 후 객체를 이용해 프로그램을 작성하는 방법
- 객체지향의 특성은 캡슐화, 상속, 추상화, 다형성
AOP(Aspect-Oriented Programming) 란?
- AOP (Aspect-Oriented Programming) 는 관점 지향 프로그래밍으로 로그처리, 보안, 트랜젝션 관리 그리고 예외사항 처리 등의 코드를 단일 모듈로 각각 작성하고 필요한 시점에 핵심코드를 삽입하여 동작하게 하는 것
객체, 클래스, 메소드 란?
클래스(Class)
- 유사한 특징을 지닌 객체들의 속성을 묶어 놓은 집합체
- 동일한 속성과 행위를 수행하는 객체들의 집합
★ 클래스 선언 방법 ★
public class 클래스명 {
필드(Field); //메소드에서 필요로 하는 정보를 제공할 목적의 변수 : 변수선언
...
생성자(Constructor); //인스턴스 생성을 목적으로 하는 메소드
...
메소드(Method); //기능을 제공할 목적의 명령들의 모임
...
}
메소드(Method)
- 필드에 저장된 정보를 제어하기 위한 명령들의 모임 → 기능
오버로딩, 오버라이딩 이란?
메소드 오버로드(Method Overload)
- 클래스에 동일한 이름의 메소드를 선언할 수 있는 방법
- 동일한 기능을 제공하는 메소드는 같은 이름의 메소드명으로 선언하는 것을 권장
- 같은 메소드 이름, 다른 매개변수로 다수의 메소드를 중복 정의
★ 오버로드 작성 규칙 ★
- 클래스에서 동일한 메소드명으로 선언하며 메소드 파라메터의 갯수,자료형등을 다르게 선언
- 메소드의 접근지정자, 반환형은 오버로드와 무관
- 다형성 : 동일한 이름의 메소드를 호출해도 상태에 따라서 다른 메소드가 호출되어 기능 제공
→ 파라메터(매개변수)에 전달되는 값에 따라서 다른 메소드가 호출되서 실행
→ 메소드 오버로드, 메소드 오버라이드
→ 파라메터에 전달되는 값에 따라 다른 메소드 호출
메소드 오버라이딩(Method Overriding)
- 같은 메소드 이름, 같은 매개변수로 다수의 메소드를 재정의 (덮어씌우기)
서블릿 생명주기
- init() 메소드
→ 서블릿 객체 생성 시 호출 (1번만 호출)
→ 서블릿에 대한 초기화 작업을 위한 메소드
# 서블릿 클래스의 생성자는 서블릿 관련 초기화 작업에 부적절하다. - service() 메소드(doGet() 또는 doPost())
→ 서블릿 객체를 이용(클라이언트 요청)시 호출되는 메소드(요청할때마다 호출)
→ 요청에 대한 응답처리를 하기 위한 메소드 - destroy() 메소드
→ 서블릿 객체 소멸 시 호출 (1번만 호출)
→ 서블릿에 대한 마무리 작업을 위한 메소드
GET 과 POST의 차이점
URL 요청 → GET 또는 POST
- GET
- URL에 QueryString을 사용하여 테이터 전송
- 소용량 데이터 전송 또는 보안이 필요없는 데이터 전송
- POST
- http 프로토콜을 사용하여 데이터 전송
- 대용량 데이터 전송 또는 보안이 필요한 데이터 전송
inner join, outer join
- inner join
- 두 테이블에서 특정 조건을 만족하는 결과만 반환한다. (교집합)
- 두 테이블에서 존재하는 값만 반환한다. (null값은 포함되지 않는다.)
- outer join
- 두 테이블에서 기준이 되는 테이블은 모든 결과를 반환하고, 기준이 아닌 테이블은 조건에 만족하는 결과만 반환 (null 값 포함)
- left join과 right join 으로 구분
DAO, DTO, VO 란?
DAO(Data Access Object)
- DAO(Data Access Object)의 약자로 데이터베이스의 data에 접근하기 위한 객체이다.
- DataBase 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용합니다.
DTO(Data Transfer Object)
- DTO : DTO(Data Transfer Object)는 계층간 데이터 교환을 위한 자바빈즈를 의미한다.
- 계층간 : Controller, View, Business Layer, Persistent Layer 등을 말하며 각 계층간 데이터 교환을 위한 객체를 의미한다.
- DTO는 로직을 가지지 않는 순수한 데이터 객체이고 getter, setter 메소드만 가진 클래스를 의미합니다.
VO(Value Object)
- VO : VO(Value Object)는 DTO와 혼용해서 쓰이긴 하지만 미묘한 차이가 있습니다.
- VO는 값 오브젝트로써 값을 위해 쓰인다. 자바는 값 타입을 표현하기 위해 불변 클래스를 만들어서 사용하는데 불변이라는 것은 readOnly 특징을 가진다.
- 이러한 클래스는 중간에 값을 바꿀 수 없고 새로 만들어야 한다는 특징이 있다.
반응형
젠킨스(Jenkins)란?
- 빌드를 자동화 해주는 툴이다.
- 빌드 : 서버에 올릴 수 있는 상태로 만드는 것
- 기능 1 : 대쉬보드 기능 제공 - 여러가지 배포 작업의 상황을 모니터링 할 수 있음
- 기능 2 : 배포 스크립트를 개발자 로컬에서도 실행할 수 있는데 젠킨스 프로그램을 띄워놓으면 스케줄링을 해준다.
- 셋팅이 어렵고 잘 안되고 힘들어서 잘 안 쓰게 된다.
재귀
- 재귀함수 : 자기자신을 호출하는 함수
- 자신의 복사본을 호출하여 더 작은 문제를 풀게함으로써 문제를 해결한다.
로우 레벨 지식
- 로우 레벨 프로그래밍 언어는 컴퓨터가 이해하기 쉽게 작성된 프로그래밍 언어로, 일반적으로 기계어와 어셈블리어를 말한다.
- 실행속도가 매우 빠르지만 배우기가 어려우며 유지보수가 힘들다.
- 기계어 : 0과 1의 이진수로 프로그램을 하는 기계어는 컴퓨터가 바로 읽을 수 있다
- 어셈블리어 : 기계어를 보완하기 위해 나온 언어. 기계어와 명령어가 1:1로 대응되는 단어들로 구성되어 있다.
- 명령 실행 속도가 가장 빠르다.
- 매우 세밀하게 프로그램 해야한다.
- 어셈블리어는 하드웨어 특성을 탄다.
- 어셈블리어 장점
- 프로그램의 실행 속도가 매우 빠르다.
- 프로그램의 크기가 매우 작다.
- 어떤 프로그램이라도 만들 수 있다.
- 어떤 기계에서도 사용 가능
- 어셈블리어 단점
- 배우기가 어렵다.
- 큰 프로그램을 만들기 어렵다.
- 프로그래밍 시간이 오래 걸리고 디버깅이 어렵다.
- 제작된 프로그램이 하드웨어별 특성을 탄다.
멀티 스레드 지식
- 하나의 프로세스를 다수의 실행 단위로 구분하여 자원을 공유하고 자원의 생성과 관리의 중복성을 최소화하여 수행 능력을 향상시키는 것을 멀티스레딩이라고 한다.
- 하나의 프로그램이 동시에 여러개의 일을 수행할 수 있도록 해주는 것이다.
문제점
- 멀티 프로세스 기반으로 프로그래밍을 할 때는 프로세스 간 공유하는 자원이 없기 때문에 동일한 자원에 동시에 접근하는 일이 없었지만 멀티 스레딩을 기반으로 프로그래밍할 때는 이 부분을 신경써줘야 한다.
- 서로 다른 스레드가 데이터와 힙 영역을 공유하기 때문에 어떤 스레드가 다른 스레드에서 사용중인 변수나 자료구조에 접근하여 엉뚱한 값을 읽어오거나 수정할 수 있다.
- 그렇기 때문에 멀티 스레딩 환경에서는 동기화 작업이 필요하다.
- 동기화를 통해 작업 처리 순서를 컨트롤하고 공유 자원에 대한 접근을 컨트롤 하는 것이다.
- 하지만 이로 인해 병목 현상이 발생하여 성능이 저하될 가능성이 높다.
- 그러므로 과도한 락(lock)으로 인핸 병목 현상을 줄여야 한다.
- 공유 자원이 아닌 부분은 동기화 처리를 할 필요가 없다. 즉, 동기화 처리가 필요한 부분에만 synchronized 키워드를 통해 동기화하는 것이다.
- 불필요한 부분까지 동기화를 할 경우 현재 쓰레드는 락(lock)을 획득한 쓰레드가 종료하기 전까지 대기해야한다. 그렇게 되면 전체 성능에 영향을 미치게 된다.
- 즉 동기화를 하고자 할 때는 메소드 전체를 동기화 할 것인가 아니면 특정 부분만 동기화할 것인지 고민해야 한다.
스레드와 프로세스 차이
- 멀티 프로세스 : [데이터영역, 힙, 스택] 영역 모두를 비공유
- 멀티 스레드 : [데이터영역, 힙, 스택] 영역 중 스택 영역만 비공유
- 프로세스는 메모리에 적재(load)되어 실행되고 있는 프로그램을 말한다. 정적인 프로그램과 달리 프로세스는 실제 실행 중인 프로그램을 일컫기 때문에 동적이라고 표현하기도 한다.
- 스레드는 프로세스 내에서 실행되는 흐름이다.
반응형
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 객체지향 프로그래밍에 대한 이해 (1) (0) | 2020.12.19 |
---|---|
웹 서버 :: 이클립스 WAS 설치(Apache Tomcat) 및 사용방법 (0) | 2020.12.17 |
신입 개발자 기술면접 준비하기 (2) - Java (0) | 2020.12.16 |
이클립스(eclipse) 다운로드 및 실행 (0) | 2020.09.26 |
jdk 다운로드 및 환경변수 설정하기 (0) | 2020.09.26 |