1.자바(JAVA)
-네트워크 상에서 쓸 수 있도록 미국의 선 마이크로 시스템즈가 개발한 객체 지향 프로그래밍 언어
특징
-자바가상머신(JVM)만 설치하면 컴퓨터의 운영체제에 상관없이 작동한다.(즉, 운영체제에 독립적)
-기본 자료형을 제외한 모든 요소들이 객체로 표현
-객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어
-Garbage Collector를 통한 자동적인 메모리 관리
-멀티쓰레드를 지원
2.OOP(객체 지향 프로그래밍 = Object Oriented Programming)
-객체지향 프로그래밍을 의미
데이터를 객체로 취급하여 프로그램에 반영한 것이며, 순차적으로 프로그램이 동작하는 기존의 것들과는 다르게
객체와 객체의 상호작용을 통해 프로그램이 도작하는 것을 말한다.
특징
-객체지향 프로그래밍은 코드의 재사용성이 높다
-코드의 변경이 용이
-직관적인 코드분석
-개발속도 향상
-상속을 통한 장점 극대화
3.Object(객체)
-객체는 OOP에서 데이터(변수)와 그 데이터에 관련되는 동작(함수). 즉, 절차, 방법, 기능을 모두 포함함
예)기차역에서 승차권을 발매하는 경우, 실체인 '손님' 동작인'승차권 주문'은 하나의 객체이며, 실체인 '역무원'과 동작인 '승차권 발매'도 하나의 객체이다.
"같은 성질, 같은 구조와 형태를 가지는 객체는 등급으로 정의하고 등급에 속하는 객체는 그 등급의 인스턴스라고 한다."
4.Overloading vs Overriding
Overloading(오버로딩)
-같은 이름의 메소드를 여러개 정의하는 것
-매개변수의 타입이 다르거나 개수가 달라야 한다.
-return type과 접근 제어자(public 등..)는 영향을 주지 않음.
Overrding(오버라이딩)
-상속에서 나온 개념
-상위 클래스(부모 클래스)의 메소드를 하위 클래스에서 재 정의
5. Servlet, JSP
Servlet : Container가 이해 할 수 있게 구성된 순수 자바 코드로만 이루어진 것(Html in JAVA)
JSP(Java Server Page) : Html기반에 JAVA코드를 블록화하여 삽입한 것(Java in html)
6.JDBC
Java DataBase Connection의 약자로 JAVA언어를 통해 데이터 베이스에 접근 할 수 있는 프로그래밍을 의미
7.Get과 Post방식
Get방식
-클라이언트에서 서버로 데이터를 전달할 때, 주소 뒤에 "이름"과 "값"이 결합된 스트링 형태로 전달
-주소창에 스트링이 그대로 보여지기 때문에 보안성이 떨어진다.
-길이에 제한이 있다(=전송 데이터의 한계가 있다)
-Post방식보다 상대적으로 전송속도가 빠르다
Post 방식
-일정 크기 이상의 데이터를 보내야 할 때 사용한다.
-서버로 보내기 전에 인코딩하고, 전송 후 서버에서는 다시 디코딩 작업을 한다. (인코딩, 디코딩 추가)
-주소창에 전송하는 데이터의 정보가 노출되지 않음
-속도가 Get보다 느리다
-쿼리스트링(문자열) 데이터 뿐만 아니라, 라디오버튼, 텍스트박스 같은 객체들의 값도 전송가능
Get과 Post
-Get은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용
-Post는 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용
-Get을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩 되어 URL에 붙는다.
-Post방식은 전달되는 데이터가 보이지 않는다.
-Get방식은 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생 할 수 있다.
-웹 서버에 많은 데이터를 전달하기 위해서는 Post방식을 사용하는 것이 바람직하다.
8.Session과 Cookie
사용이유 : 현재 우리가 인터넷에서 사용하고 있는 HTTP프로토콜은 연결 지향적인 성격을 버렸기 때문에,
새로운 페이지를 요청할 때마다 새로운 접속이 이루어지며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않음.
이에 따라, HTTP프로토콜을 이용하게 되는 웹사이트에서는 웹페이지에 특정 방문자가 머무르는 동안에
그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.
(즉, 어디 메뉴 하나 눌러서 들어갔다고 로그아웃 되지 않게하기 위해(로그인 지속 등))
Session
-특정 웹사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한번의 방문을 의미한다.
-Session에 관련된 데이터는 Server에 저장된다.
-웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제시 사라진다.
-Cookie에 비해 보안성이 좋다.
Cookie
-사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복 할 수 있는 방법
-인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해주는 정보이다.
-cookie는 인터넷 사용자가 특정 웹서버에 접속할 때, 생성되는 개인아이디와 비밀번호, 방문한 사이트의 정보를 담은
임시 파일로써, Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는
그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 떄 사용된다.
-cookie는 Client PC에 저장 되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.(정보 유출 가능)
9.MVC 패턴
-객체지향 프로그래밍에서, MVC란 사용자 인터페이스를 성공적이며, 효과적으로 데이터 모형에 관련시키기 위한,
방법론 또는 설계 방식중 하나이다.
-MVC패턴은 목적 코드의 재사용에 유용한 것은 물론, 사용자 인터페이스와 응용프로그램 개발에 소요되는 시간을
현저하게 줄요주는 형식이라고 많은 개발자들이 평가하고 있다.
MVC의 구성요소
-Model : 소프트웨어 응용과 그와 관련된 고급 클래스 내의 논리적 기반 구조를 표현. 이 목적 모형은
사용자 인터페이스에 관한 어떠한 정보도 가지고 있지 않다.
-View : 사용자 인터페이스 내의 구성요소들을 표현(사용자들에게 보여지는 화면)
-Controller : Model과 View를 연결하고 있는 클래스를 대표. Model과 View내의 클래스들 간 정보 교환하는데 사용.
10.Interface, Abstract
Interface
-일종의 추상 클래스
-오직 추상메서드와 상수만을 멤버로 갖는다.
-Implements 키워드를 사용
-상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하여 쓸 수 있도록 한다.
-Extends는 하나의 클래스만 상속 가능하나, Interface는 다중 상속이 가능하다.
Abstract
-추상메서드를 하나 이상 가진 클래스
-자신의 생성자로 객체 생성 불가능
-하위 클래스를 참조하여 상위 클래스의 객체를 생성
-하위 클래스를 제어하기 위해 사용
Interface VS Abstract
공통점
-new 연산자로 인스턴스 생성 불가능
-포로토타입만 있는 메서드를 갖는다.
-사용하기 위해서는 하위클래스에서 확장/구현해야 한다.
-사용하는 키워드가 다르다
-Abstract는 일반 메서드를 사용 할 수 있지만, Interface는 메서드 선언만 가능하다.
11.Call by reference, Call by value ★
Call by reference : 매개변수의 원래 주소에 값을 저장하는 방식, 클래스 객체를 인수로 전달한 경우
Call by value : 인수로 기본 데이터형을 사용, 주어진 값을 복사하여 처리하는 방식.
메소드 내의 처리 결과는 메소드 밖의 변수에 영향을 미치지 않는다.
12. Static의 의미
-클래스가 로딩 될 때, 메모리 공간을 할당하는데 처음 설정된 메모리 공간이 변하지 않음을 의미
-객체를 아무리 많이 만들어도 해당 변수는 하나만 존재(객체와 무관한 키워드)
13.Framework
-특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스프레임과 인터페이스 프레임의 집합
-특정한 틀을 만들어놓고 거기에 살을 붙여 놓음으로써 프로그램을 만들어 작업시간을 줄여주는것.
-프레임워크는 특정 개념들의 추상화를 제공하는 여러클래스나 컴포넌트로 구성된다.
-프레임워크는 이렇게 추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의한다.
-프로임워크 컴포넌트들은 재사용이 가능하다.
-좀 더 높은 수준에서 패턴을 조작한다.
-객체지향 개발을 하게 되면서 개발자의 취향에 따라 다양한 프로그램이 나오게 되었다.
프로그램 개발에 투입되는 개발자도 점점 늘어감에 따라 전체 시스템의 통합성, 일관성이 부족하게 되었다.
그래서 개발자의 자유를 제한 하기위해 프레임워크를 도입했다.
프레임워크가 가져가 할 특징
-개발자들이 따라야할 가이드라인을 가진다(쉽게말해 규칙.)
-개발할 수 있는 범위가 정해져 있다.
-개발자를 위한 다양한 도구들이 지원된다.
장/단점
장점 : 개발 시간을 줄일 수 있고, 오류로부터 자유로울 수 있다.
단점 : 프레임워크에 너무 의존하면, 개발 능력이 떨어져서 프레임워크 없이 개발하는 것이 불가능해진다(진짜일까?)
14.Garbage Collection
-시스템에서 더이상 사용하지 않는 동적 할당된 메모리 블럭을 찾아 자동으로 다시 사용 가능한 자원으로 회수
15.Primitive type과 Reference type
Primitive type
-변수에 값 자체를 저장
-정수형 byte, short, int, long
-실수형 float, double
-문자형 char
-논리형 boolean
-Primitive type은 Wrapper Class를 통해 객체로 변형 할 수 있다.
예) int -> Integer, char -> Character
Reference type
-메모리상에 객체가 있는 위치를 저장
종류 - Class, Interface, Array 등
16.Wrapper Class
-Primitive type으로 표현할 수 있는 간단한 데이터를 객체로 만들어야 할 경우가 있는데 그러한 기능을 지원
17.Spring Framework ()
18 Thread
-프로세스내에서 동시에 실행되는 독립적인 실행 단위, 자원을 많이 사용하지 않고 구현이 쉬우며 범용성이 높다.
Process : 운영체제에서 실행중인 하나의 프로그램(하나 이상의 쓰레드를 포함한다.)
Thread의 장점
-빠른 프로세스 생성
-적은 메모리 사용
-쉬운 정보 공유
Thread의 단점
-교착상태에 빠질 수 있다
(다중 프로그래밍 체제에서 하나 또는 그 이상의 프로세스가 수행 할 수 없는 어떤 특정시간을 기다리고 있는 상태)
Thread와 Process의 차이
-여러 분야에서 '과정' 또는 '처리'라는 뜻으로 사용되는 용어 '실행중인 프로그램'(프로세스)
즉, 이 프로세스내에서 실행되는 각각의 일을 스레드라도 한다. 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다.
19.접근 제한자(public > protected > default > private)
public : 접근 제한이 없다(같은 프로젝트 내 어디서든 사용가능)
protected : 같은 패키지 내, 다른 패키지에서 상속받아 자손클래스에서 접근 가능
default : 같은 패키지 내에서만 접근 가능
private : 같은 클래스 내에서만 접근 가능
20.소캣 통신(TCP/UDP)
TCP(Transmission Control Protocol)
-연결형 서비스 제공
-높은 신뢰성 보장
-데이터 흐름 제어, 혼잡 제어
UDP(User Datagram Protocol)
-비연결성 서비스 제공
-신뢰성이 낮음
-데이터의 전송 순서가 바뀔 수 있음
-TCP보다 전송속도가 빠름
21.Stack, Queue
Stack
-후입선출 (나중에 들어온놈부터 빠져나간다.)
-push()를 이용한 데이터 입력, pop()을 이용한 데이터 출력
-예) 시스템 스택 : 함수의 호출과 복귀 순서는 스택의 구조를 응용하여 관리
-역문 문자열 만들기, 수식의 괄호 검사, 수식의 후위 표기법 변환
Queue
-선입선출
-enQueue()를 이용한 데이터 입력, deQueue()를 이용한 데이터 출력
-예)우선순위가 같은 작업 예약(인쇄 대기열), 선입선출이 필요한 대기열(티켓카운터)
!Linear Queue(선형 큐)는 메모리 재사용이 불가능. 이러한 문제점을 보완하여 Circular Queue(원형 큐)가 나옴
22.Singleton Design Patten(싱글톤 디자인 패턴)
-클래스 인스턴스가 하나만 만들어지도록 하고, 그 인스턴스에 대한 전역 접근을 제공한다.
예) Room Dadabase
23.Database에서 Index란?
-인덱스는 데이터베이스 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조를 일컫는다.
-테이블 내의 1개의 컬럼, 혹은 여러 개의 컬럼을 이용하여 생성될 수 있다.
-고속의 검색 동작뿐만 아니라, 레코드 접근과 관련 효율적인 순서 매김 동작에 대한 기초를 제공한다.
-인덱스를 저장하는데 필요한 디스크 공간은 보통 테이블을 저장하는데 핋요한 디스크 공간보다 작다.
++지금부터는 개인적으로 추가 하는 내용
24. 인코딩(Encoding)과 디코딩(Decoding)
-컴퓨터는 문자를 인식할 수 없기 때문에 숫자로 변환되어 저장된다. 변환해주기 위해 기준이 있어야하는데, 이것을
문자코드라고 하며 대표적으로는 ASCLL코드 또는 유니코드라고 한다.
즉, 예를들어(컴퓨터는 숫자로 데이터를 관리하니까 ㄱ -> 0, ㄴ->1 이런식으로 일련의 규칙을 만들어 놓은것을 유니코드)
결론
-문자 -> 숫자(인코딩)
-숫자 -> 문자(디코딩)
25. MVC & MVP & MVVM
MVC : 위에 이미 설명. 고로 패스
MVP(Model View Presenter)
-시각적인 것(View)과 데이터(Model)를 완전히 분리,
이 둘이 Presenter에 의해서만 상호작용 할 수 있도록 하는 디자인 패턴
Model : 어플리케이션에서 사용되는 데이터, 그 데이터를 처리
View : 사용자에게 보여주는 UI부분
Presenter : View에서 받은 사용자의 행동을 기반으로 Model로직을 호출하거나,
Model의 로직을 기반으로 나온 결과를 View에 보내 UI의 변경을 야기한다(진행자, 발표자)
의존성
-어떤 클래스A가 다른 클래스를 이용할때 B클래스를 의존한다고 한다치면 A는 B없이 작동할 수 없고 B를 재사용하지 않으면, A또한 재사용 할 수 없다.
장점 : MVC같은 View와 Model의 의존성이 없다는 것.
단점 : View와 Presenter 사이의 의존성이 높음 (ㅋㅋㅋ이게머얔)
'Model과 View간의 결합도를 낮추면, 새로운 기능을 추가하거나 변경할 필요가 있을 떄 관련된 부분만
수정하면 되기 때문에 확장성이 좋아지며, 테스트코드를 작성하기 편리해지기 떄문에 더 안전한 코드 작업이 가능하다.'
MVVM(Model View ViewModel)
Model : 어플리케이션에서 사용되는 데이터, 그 데이터를 처리
View : 사용자에게 보여지는 부분
View Model : View를 표현하기 위해 만든 View를 위한 Model. View를 나타내주기 위한 Model이자 View를 나타내기 위한 데이터를 처리 하는 부분(즉, 모든것은 View를 위해서. 스콜!)
사용자의 행동 -> View -> Command pattern으로 Action -> View model 데이터 요청 -> Model
요청에대한 응답 -> View Model 데이터 가공, 저장 -> View 화면에 제공 Data binding ★
패턴 : Command패턴, Data Binding
장점 : 의존성 X, 각각의 부분은 독립적이기 때문에 모듈화 하여 개발 할 수 있다.(빠른 개발, 쉽지 않은 설계)
26.리팩토링(Refactoring)
-외부 동작을 바꾸지 않으면서 내부 구조를 개선
-코드가 작성된 후에 디자인을 개선하는 작업
-모든 것을 미리 생각하기보다는 개발을 하면서 지속적으로 좋은 디자인을 찾음
-메소드 내의 지역변수와 parameter를 주의 깊게 볼 필요가 있다
-값이 수정되지 않는 변수는 파라미터로 넘길 수 있다.
-값이 수정되는 변수는 주의가 필요하다. 변화되는 부분을 함수로 추출하여 리턴 값으로 돌려줄 수 있다.
-Naming의 중요성
-클래스의 베소드는 클래스의 변수를 사용해야 한다. 클래스의 정보를 사용하고있지 않다면, 사용하고 있는 변수쪽으로 메소드는 움직여야한다.
-임시변수는 가능하면 제거하는것이 좋다. 임시변수는 종종 쓸데없이 많은 파라미터를 만드므로 문제가 된다.
-임시변수를 하나의 메소드로 구현하여 리팩토링 하자
-리팩토링하는 과정에서 알고리즘적으로 성능이 더 안좋아 질 수 있다. 하지만, 어느 알고리즘 부분이 수정되어야 하는지 명확하게 보이게 되어 최적화하기 더 쉬운 형태로 변경되는 장점이 있다.
-다른 객체의 속성을 기반으로한 switch문은 좋지 않다. 그 부분을 함수로 추출하여 자신의 데이터를 사용하는 것으로 리팩토링해야한다.
-메소드에서 두개의 클래스 변수를 사용하고 있다면 변화하기 쉬운쪽으로 메소드를 이동시켜 변화의 폭을 최대한 작게하자
-기능이 한쪽으로 모여진 클래스를 추상화하여 상속관계로 표현 할 수 있다.
-테스트 -> 리팩토링 -> 테스트 -> 리팩토링 -> 테스트
리팩토링의 원리
-일련의 리팩토링을 적용하여 겉으로 보이는 동작의 변화없이 소프트웨어 구조를 바꾼다.
리팩토링의 목적
-리팩토링의 목적은 소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것이다.
-리팩토링은 겉으로 보이는 소프트웨어의 기능을 변경하지 않는다는 것이다.
리팩토링의 이유
-코드의 구조가 망가지는 효과는 누적된다.
-코드의 디자인을 유지하도록 도와준다.
-중복을 제거함으로써 각각의 작업에 대한 코드가 오직 한 곳에만 있게 할 수 있다.
-디자인 개선, 버그를 찾도록 도와줌
리팩토링의 때
-삼진 규칙(3번의 중복 / 3번의 같은 행위를 한다면 리팩토링을 하자)
-기능을 추가할 때
-버그를 수정해야할 때
-코드 검토할 때
리팩토링의 문제
-의도했던 것보다 짧고, 불확실하다.
리팩토링을 하지 말아야 할 때
-현재의 코드가 작동하지 않는다면 확실히 재작성이 필요한 경우
-리팩토링을 하기 전에 코드가 제대로 작동해야 한다는 것을 기억
-마감일에 가까운 경우
리팩토링해야 할 것들
-중복된 코드
-긴 메소드
-거대한 클래스
-긴 파라미터 리스트
-확산적 변경
-산탄총 수술
-기능에 대한 욕심
-데이터 덩어리
-기본 타입에 대한 강박관념
-Switch문
-평생 상속 구조
-게으른 클래스
-추측성 일반화
-임시 필드
-메세지 체인
-미들 맨
-부적절한 친밀
-다른 인터페이스를 가진 대체 클래스
-불완전한 라이브러리 클래스
-데이터 클래스
-거부된 유산
-주석
'개발언어 > JAVA' 카테고리의 다른 글
안드로이드, 자바 개념 정리2 (0) | 2021.02.09 |
---|---|
운영체제 6(FCFS, RR) (0) | 2021.01.27 |
안드로이드 골뱅이 쓰는이유 (0) | 2021.01.13 |
안드로이드 getinstance() 란? (0) | 2021.01.13 |
안드로이드 Room 사용법 (feat.binding) (0) | 2021.01.08 |