티스토리 뷰

Web/JAVA

[JAVA] 기술 정리

Aaron 2019. 8. 28. 21:04
반응형


#. JAVA

   절차지향 (POP)

    - 실행되는 순서가 위에서부터 아래로 순차적으로 진행되는 형태를 가진 언어

    - 프로그램 재사용 시 기존에 만들어진 코드를 복사하여 붙여넣기 하는 방법 사용

      => 함수의 등장.

           ㄴ자주 사용되는 특정한 코드를 하나의 모듈(묶음)로 묶어 놓은 것

           ㄴ프로그래머가 사용하고 싶을 때마다 호출하여 코드가 실행되도록 함

           ㄴ데이터와 함수 간에 유기적인 관계성을 갖지 못함


  ㅇ 객체지향 (OOP : Object-Oriented Programming)

    - 데이터를 객체로 취급하여 프로그램에 반영, 객체와 객체의 상호작용을 통해 프로그램이 동작

    - 코드의 재사용성이 높음, 코드 관리가 용이, 코드의 중복을 제거

    - 각각의 객체는 메시지를 주고받고, 데이터를 처리 -> 유지보수성 Good

    - 함수보다 더 높은 모듈 관리를 위해 자신이 가진 고유의 데이터와 그 데이터를 처리할 수 있는 메서드를 가짐

    - 모든 데이터를 객체로 취급하므로 객체와 객체 간 자유로운 데이터 이동 가능


  ㅇ 객체(Object) : 현실 세계에 존재하는 유, 무형의 모든 것

  ㅇ 클래스(Class) : 현실 세계의 객체를 컴퓨터 메모리에 생성할 수 있는 템플릿

  ㅇ 인스턴스(Instance) : 컴퓨터 메모리에 존재하는 객체


  ㅇ 상속(Inheritance) : 속성과 메서드가 약간 다른 객체를 필요로 할 때, 기존의 클래스를 이용하여 새로운 클래스를 작성

                              이미 존재하는 클래스를 바탕으로 필요한 변수와 메서드를 추가로 정의

  ㅇ 다형성(Polymorphism) : 하나의 인터페이스를 이용하여 서로 다른 구현을 제공

    - 메서드 오버로딩(Overloading) : 이름은 동일하지만 입력 항목(인자 개수, 유형)이 다른 메서드

    - 메서드 오버라이딩(Overriding) : 부모 클래스의 메서드를 자식 클래스가 동일한 형태로 덮어쓰기(재정의)

  ㅇ 추상화(Abstraction) : 공통적인 특징을 찾아내어 Class를 설계, 구체적인 사실들을 일반화하여 기술

    ex) S사의 TV, L사의 TV, I사의 TV 를 모두 조작 가능한 리모컨 -> 각 제조사의 리모컨을 일반화하여 하나로 조작

  ㅇ 캡슐화(Encapsulation) : 변수와 메서드를 하나의 추상화된 클래스로 묶는 과정

  ㅇ 정보 은닉(Information Hiding) : 캡슐화된 클래스 내부의 메서드를 통해서만 변수 조작 가능

  ㅇ 메시지(Message) : 객체 간 서로 통신하는 방법


  ㅇ 쓰레드(Thread)

    - 하나의 작업 단위, 한 프로세스 내에 여러 쓰레드가 존재 가능, 해당 쓰레드들은 프로세스의 자원을 공유

      ㄴ 쓰레드 생성 방법

          1. Thread 클래스 상속하기(extends Thread)

          2. Runnable 인터페이스를 implements 하기 (다른 클래스를 상속받은 경우)

          3. 익명 클래스 이용하기 (new Thread()), 쓰레드가 단 한번만 수행

  ㅇ 프로세스(Process)

    - 운영체제에서 실행중인 하나의 프로그램(하나 이상의 쓰레드를 포함)

  ㅇ 멀티 쓰레드의 장단점

    - 두 가지 이상의 작업을 동시에 실행할 수 있어 자원을 효율적으로 이용 가능. 하지만 dead lock 및 동기화에 대한 철저한 검증이 필요

  ㅇ 동기화(Synchronized)

    - 멀티 쓰레드 사용 시 공유 자원의 동시 접근을 제어, 자원의 유실 방지


  ㅇ Java Collection의 대표 인터페이스

    - List : 순서가 있는 데이터의 집합, 데이터 중복 허용 O (ArrayList, LinkedList, Stack, Vector)

    - Set : 순서를 유지하지 않는 데이터의 집합, 데이터 중복 허용 X (HashSet, TreeSet)

    - Map : 키와 값의 쌍으로 이루어진 데이터의 집합, 순서 유지 X, 키 중복 허용 X, 값 중복 허용 O (HashMap, TreeMap, HashTable, Properties)


  ㅇ 근제어자의 종류와 특성

    - private : 같은 클래스 내에서만 접근 가

    - default : 같은 패키지 내에서만 접근 가능

    - protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능

    - public : 접근 제한 없음

    -> 적용 범위 : public > protected > default > private


  ㅇ 객체의 직렬화(Serialize)

    - 객체를 직렬화하여 전송 가능한 형태로 만드는 것

    - 객체들의 데이터를 연속적인 데이터로 변형하여 Stream을 통해 데이터를 읽도록 해줌

        - 객체를 String 형태의 데이터로 만들기 위해 연속적인 데이터(serial)로 변환 필요

        - String 형태의 데이터를 읽어 객체로 만드는 것을 역직렬화 


  ㅇ 추상클래스 : 이름만 존재하고 기능이 생략된 메서드, 상속을 통해서 자손 클래스에서 오버라이딩하여 구현

  ㅇ 인터페이스 : 조립 설명서, 일종의 규약, 오직 추상메서드와 상수만을 멤버로 가짐

                       인터페이스로부터만 상속받을 수 있음, 인터페이스로부터 다중상속 가능

  ㅇ NIO

    - 기존 자바IO의 단점을 보완한 New IO(NIO) 패키지, Nonblocking IO를 지원

    - Buffer 클래스를 도입하여 기존에 단순배열로만 처리해야 했던 많은 부분들을 좀 더 효율적이고 편리하게 다룰 수 있도록 지원

    - 기존 단방향 스트림에서 Channel을 도입하여 읽기, 쓰기, 읽고쓰기 등 세가지 형태의 작업 방식을 지원

    - 단 한 개의 쓰레드만으로 수천에서 수만명의 동시 사용자를 처리할 수 있는 서버 생성 가능


  ㅇ Call by Reference : 변수의 주소값을 매개변수로 전달, 메서드 내의 처리 결과가 메서드 밖의 변수에 영향

  ㅇ Call by Value : 변수의 값을 복사하여 매개변수로 전달, 메서드 내의 처리 결과가 메서드 밖의 변수가 영향 X


 Framework

    - 특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스프레임과 인터페이스 프레임의 집합

    - 특정 틀을 만들어놓고 거기에 살을 붙이며 프로그램을 만드는 형식으로 작업 시간을 줄여주는 것이 특징

    - 특징

       ㄴ 개발자들이 가져야할 가이드 라인을 가짐

       ㄴ 개발할 수 있는 범위가 정해져 있음

       ㄴ 개발자를 위한 다양한 도구를이 지원

    - 장/단점

       ㄴ 장점 : 개발 시간을 줄이고 오류로부터 자유로울 수 있음

       ㄴ 단점 : 프레임워크에 너무 의존하면 개발 능력이 저하되어 프레임워크 없이 개발하는 것이 불가능해짐


  ㅇ Garbage Collection

    - 시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것


  ㅇ JVM(Java Virtual Machine) (=자바 가상 머신)

    - 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것

    - JAVA와 OS사이에서 중개자 역할을 수행하여 JAVA가 OS에 구애받지 않고 재사용 가능하게 해줌

    - 한정된 메모리를 효율적으로 사용하여 최고의 성능을 내기 위함

-

-

-

#. WEB

  ㅇ MVC (Model-View-Controller) 패턴 

    - 서로 분리되어 각자의 역할에 집중, 유지보수성, 애플리케이션의 확장성, 효율성 향상, 중복코딩이라는 문제점 해결

    - 사용자가 controller를 조작하면 controller는 model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달

    - Controller에 다수의 ModelView가 복잡하게 연결되어 있는 상황 -> 너무 복잡하고 비대해져서, 새 기능을 추가할 때마다 크고 작은 문제점을 가지고 소드 분석이나 테스트도 어려워짐

    - Model : 애플리케이션이 무엇을 "할 것"인지 정의

    - View : 화면에 무엇을 "보여"줄지

    - Controller : 모델이 어떻게 "처리"할지


  ㅇ Servlet : Container가 이해할 수 있게 구성된 순수 자바 코드로만 이루어진 것 (HTML in JAVA)

  ㅇ JSP(Java Server Page) : html기반에 JAVA코드를 블록화하여 삽입한 것 (JAVA in HTML)


  ㅇ Java Spring Framework

  - DI(객체의 의존성)를 이용하여 JAVA 어플리케이션을 만들 수 있는 프레임워크, 추가적으로 웹 MVC 모듈을 제공하여 동적인 웹을 효과적으로 만들 수 있도록 여러 가지 서비스를 제공하며 


  ㅇ java REST

    - 확장성 생성 언어(XML) 파일로 된 웹 페이지를 읽어 원하는 정보를 수집하는 기능 

    - 별도의 전송계층 없이 웹의 자원을 전송하기 위한 인터페이스


  ㅇ CI (Continuous Integration)

    - 지속적인 통합 -> 개발과 동시에 통합을 진행함으로써 SW의 품질을 향상


  ㅇ DI (Dependency Injection)

    - 의존성 주입 -> 설정 파일을 통해 객체간의 의존관계를 설정하므로써 외부 Assembler가 객체간의 의존 관계를 정의

    - 객체를 직접 생성하지 않고 외부에서 생성한 후 주입


  ㅇ AOP (Aspect Oriented Programming)

    - 다양한 곳에서 자주 사용되는 공통 관심요소를 단일 기능으로 뽑아내어 코드의 중복을 줄이고, 관리의 효율성을 높이는 것을 목적

      ex) 로깅(시스템 상태/작동 정보를 시간 경과에 따라 기록하는 것), 로그인


  ㅇ Get 방식

    - Client에서 Server로 데이터 전송 시, 주소 뒤에 '이름'과 '값'이 결합된 스트링 형태로 전달

    - 주소창에 쿼리가 보여지므로 보안성이 떨어짐

    - Post방식보다 상대적으로 전송 속도가 빠름

    - 전송 데이터의 한계

  ㅇ Post 방식

    - Server로 보내기 전 인코딩하고, 전송 후 서버에서는 다시 디코딩 작업을 수행

    - 주소창에 전송하는 데이터 정보가 노출되지 않아 Get 방식에 비해 보안성이 높음

    - Get방식보다 느림

    - 일정 크기 이상의 데이터를 보내야 할 때 사용

  ㅇGet 방식, Post 방식의 차이점

    - Get은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용

    - Post는 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용

    - Get을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩되어 URL에 붙음

    - Post는 전달되는 데이터가 보아지 않음

    - Get은 전달되는 데이터가 255개의 문자를 초과하는 문제 발생

    - 웹 서버에 많은 데이터를 전달하기 위해 Post 방식을 사용하는 것이 바람직


  ㅇ Session

    - 특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한 번 방문을 의미

    - Session 관련 데이터는 Server에 저장

    - 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제 시 사라짐

    - Cookie에 비해 높은 보안성

  ㅇ Cookie

    - 사용자의 정보를 유지할 수 없다는 HTTP의 한계를 극복

    - 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보

    - 사용자가 특정 웹 서버에 접속할 때, 생성되는 정보를 담은 임시 파일

    - Client PC에 저장되는 정보이므로 다른 사용자에 의해 임의로 변경이 가능(정보 유출, 낮은 보안성)


  ㅇ AngularJS

    - 자바스크립트 기반의 오픈 소스 프론트엔드 웹 애플리케이션 프레임워크의 하나

    - 애플리케이션 개발 중에 마주치는 여러 문제들을 해결하기 위해 개발


  ㅇ AngularJS Directive

     - HTML 태그에 고유한 속성을 추가하고, 태그를 작성하여 HTML 안에 특수한 기능을 할당

     - 이 디렉티브는 AngularJS에 제공되어 있을 뿐 아니라 직접 만들 수 있음, 자신만의 태그를 추가해 나갈 수 있음

-

-

-

+. AI

  ㅇ 인공 지능 : 인간의 지능을 기계(인공적)로 구현한 것


  ㅇ 머신 러닝(=기계학습) : 기계가 직접 데이터를 학습하여 그 속에 숨겨진 규칙성을 찾아내는 것.
                                   ex) 학습을 통한 분류, 날씨, 분류 예측

    - 지도학습 : 회귀, 분류

    - 비지도학습 : 군집, 연관성


  ㅇ 딥 러닝 : 데이터의 특징을 기계가 직접 학습, 인간의 뇌와 같은 인공신경망 구조를 사용하여 학습.
                ex) 사물이나 데이터를 군집화하거나 분류하는 데 사용하는 기술

    -로지스틱 회귀 : 독립 변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측

    - 인공신경망(ANN, Artificial Neural Network) : 생물학의 신경망에서 영감을 얻은 학습 알고리즘, 입력층-은닉층-출력층으로 이루어짐. 시냅스의 결합으로 네트워크를 형성한 인공 뉴런이 학습을 통해 시냅스의 결합 세기를 변화시켜 문제해결능력을 가짐

    -컨볼루션 신경망(CNN, Convolutional Neural Network) : 영상과 이미지에서 좋은 성능. 입력된 이미지에서 특징을 추출하여 가중치를 사용한 마스크를 도입 ex)손글씨 인식

    -순환 신경망(RNN, Recurrent Neural Network) : 문장을 학습하는 경우 과거에 입력된 데이터와 나중에 입력된 데이터 사이의 관계를 고려, 순서대로 입력된 데이터를 기억하여 가중치를 부여, ex) 번역, 기사 카테고리 선정


  ㅇ 정형데이터 : 고정된 필드에 저장된 데이터 (ex 관계형 데이터베이스, 스프레드시트)

  ㅇ 반정형데이터 : 고정된 필드에 저장되어 있지는 않지만, 메타데이터나 스키마 등을 포함하는 데이터(ex XML, HTML)

  ㅇ 비정형데이터 : 고정된 필드에 저장되어 있지 않은 데이터(ex 이미지, 동영상, 음성데이터) ​​

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday