Search
Duplicate
😀

01. Java 기초

태그
MVC
Java 기초
MVC Pattern
- Model, View, Controller의 약자 - 하나의 어플리케이션을 Model, View, Controller로 나누어 의존성을 낮추는 디자인 기법 - Model과 View의 분리가 가장 큰 목적이다. ⇒ View의 잦은 변경으로부터 Model을 자유롭게 하기 위함(종속성 제거) ⇒ View의 종속성을 Controller쪽에 둔다.
View - end-user와의 접점, UI Model - 실제 기능(서비스)
Front-End & Back-End with MVC Pattern
Front-End ㅁ 사용자에게 보여지는 어플리케이션의 가장 앞단 사용자의 request를 Back-End로 전달하고 그에 대한 response를 받아 End-User에게 제공 과거에는 Back-End에서 만들어진 View를 직접 받는 형태가 많았으나, 최근 Front-End와 Back-End를 완전하게 분리하기 위해 REST API를 통해 Back-End로부터 View를 받지 않고 데이터만 받아와 Front-End에서 View를 생성해서 보내주는 방식이 많이 사용된다. HTML - 정적 페이지 - 문서의 구조화를 담당(ex. 눈 코 입에 대한 명시) JavaScript - 동적 페이지 - 문서의 동작 처리(프로그램) * Help Tool ⇒ jquery 라이브러리 CSS - 문서의 스타일링 * Help Tool ⇒ BootStrap, Vue.js (Front와 Back의 분리를 쉽게 하기 위해 도움)
Back-End ㅁ 데이터를 저장 및 관리하고, 어플리케이션의 클라이언트-사이드를 담당 MVC 패턴에서 Controller와 Model이 존재하는 영역 Servlet, JSP - MVC 패턴을 사용하는 경우 요청이 들어올 때 실행되는 동적 웹페이지 기술 Sprint Boot - 스프링 프레임워크를 통한 개발을 빠르게 하기 위해 스프링의 기본 설정 등을 제공 DAO - DB에 접근하는 서비스 - Model의 한 종류 - Mybatis, JDBC,,,
Java의 특징
객체지향프로그래밍 (OOP)의 3대 특징 1. 캡슐화 (Encapsulation) - Data의 은닉이 목적 2. 상속 (Inheritance) - 코드의 재사용성, 확장 + 기존내용의 일부를 customizing하는것이 목적으로 함 3. 다형성 (Polymorphism) ★ - 메소드의 다형성 - 객체의 다형성
Java의 메모리 관리 자바는 C언어와 다르게 직접 메모리 관리를 할 수 없다. 따라서 C언어의 Pointer 개념이 Java에는 존재하지 않는다. (대신 reference라는 개념이 존재) 시스템 레벨에서 garbage Collector(GC)가 메모리 관리를 수행 (객체 이동, 메모리 해제) java의 Reference reference는 C언어와 다르게 메모리 주소가 아니다. 시스템 내에 Mapping table이 존재하고, 객체를 참조할때마다 mapping table을 확인하여 실제 주소를 확인한다. 따라서 객체를 자주 참조하는 경우 성능 저하의 문제가 발생할 수 있다.
객체지향 프로그램 설계 시 유의할 점
결합도는 낮추고, 응집도는 높인다! Interface를 활용한 설계를 통해 결합도를 낮추고, 관련있는 Method의 적절한 Class 구성을 통해 응집도를 높여야 함 (대표 Case : MVC) 상속을 받으면 의존성이 높아진다 상속을 받는 순간 부모 클래스를 바꿀 수 없기 때문에 종속성이 생긴다. 따라서 상속을 사용하는 경우에는 설계를 잘 해야한다. 연관 (Association) 어떤 객체가 다른 객체를 멤버변수로 가지고 있는 경우 연관관계가 있다고 한다. 위임상속★ 내껀 아니지만 가지고 있는것처럼 호출해서 사용하는 것
다형성
메서드 다형성 - Overloading : 메서드의 중복정의 (파라미터 변화) - Overriding : 메서드의 재정의 (상속에서 사용) 객체 다형성 - 클래스의 크기 조건은 상속 tree의 위치관계로 따진다. 참조변수 = 객체 관계 big ≥ small 관계는 묵시적 형변환이기 때문에 컴파일러가 허용해준다. small ≤ big 관계는 명시적 형변환을 하지 않으면 문제가 발생한다. 다형성의 사용 (그림 A B C C2 참고) 상위 참조변수에 할당하는 객체보다 상위 클래스를 선언하는 경우에도 문제가 없다. 만약 이런 다형성이 지원되지 않는다면 4개의 객체 생성 시 4개의 참조변수를 선언해야 할 것이다. 하나의 참조변수로 모든 Case를 커버해야 하는 경우가 존재하고, 이럴 경우에 사용할 수 있다. 변수의 형변환과 다르게 데이터의 손실이 일어나지는 않지만, 접근할 수 있는 영역의 차이가 존재한다.
Java의 동작과정, 환경
xxx.java 파일을 javac를 통해 컴파일하여 xxx.class 파일(Byte Code)로 만들고 이를 해석할 수 있는 JVM을 통해 실행시킨다. javac를 통해 컴파일된 파일은 Byte 형태의 코드로 되어 있다. JVM에는 각각의 Byte가 무엇을 의미하는지가 정의되어 있고, JVM은 이를 해석하여 OS에 맞게 변환한다. java Application(xxx.class 파일)은 JVM에 의해 실행된다. 이때 JVM만 OS에 맞추어 설치하고, Application은 OS가 무엇인지를 고려할 필요가 없다. 따라서 Java는 Platfrom 독립적인 성격을 가진다.
Java의 Data Type
Primitive Type - 원자성 data - 할당된 공간에 Value가 들어간다. - 논리형, 문자형, 정수형, 실수형 존재 - 정수형의 기본 타입은 int, 실수형의 기본 타입은 double이다. Reference Type ★★ - 더 작은것으로 나눠질 수 있는 data - 할당된 공간에 참조값이 들어간다. - class, Interface, Array Type 존재 Data의 Size (형변환) byte < short < int < long < float < double
long은 8byte고, float은 4byte인데 float이 더 큰 이유는?
Java에서 실수형 data type은 지수부와 가수부를 사용하는 부동 소수점 방식을 사용한다. 따라서 정수형 data type보다 표현할 수 있는 수의 범위가 훨씬 많다.