티스토리 뷰
* 간단한 Java의 소개
- 1995년에 미국의 선 마이크로 시스템즈가 개발한 객체지향 프로그래밍 언어이다.
* Java언어의 장단점
1) 장점
- 운영체제에 독립적이다.
(JVM에서 동작하기 때문에, 특정 운영체제에 종속되지 않는다.)
- 객체지향 언어이다.
- 기본 자료형을 제외한 모든 요소들이 객체로 표현된다.
- 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어이다.
- Garbage Collector를 통해 자동으로 메모리 관리를 해준다.
- 오픈소스이다.
- 많은 웹개발자들에게 사랑을 받는다.
- 멀티스레드를 지원한다.
2) 단점
- 비교적 속도가 느리고 무겁다.
- 한번의 컴파일링으로 실행 가능한 기계어가 만들어지지 않고 JVM에 의해
기계어로 번역되고 실행하는 과정을 거치기 때문에 C나 C++의 컴파일 단계
에서 만들어지는 완전한 기계어에 비하면 속도가 느리다.
- 예외처리가 불편하다.
* OOP (객체지향 프로그래밍)
- Object-Oriented-Programming의 약어.
- 코드의 재사용성이 높다.
- 코드의 변경이 용이하다.
- 직관적인 코드분석.
- 개발속도 향상
- 상속을 통한 장점 극대화.
* OOP의 4가지 특징
1. 추상화
- 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 것.
- 쉽게 이야기해 객체들의 공통적인 데이터 및 기능을 도출하는 것.
2. 캡슐화
- 정보 은닉 (필요가 없는 정보는 외부에서 접근하지 못하도록 제한하는 것)
- 객체가 맡은 역할을 수행하기 위한 하나의 목적을 위해 데이터와 기능들을 묶는 것을 말한다.
3. 일반화
- 여러 개체들의 가진 공통된 특성을 부각시켜 하나의 개념이나 법칙으로 성립시키는 과정
4. 다형성
- 서로 다른 클래스의 객체가 같은 메세지를 받았을때 각자의 방식으로 동작하는 능력
- 한 요소에 여러 개념을 넣어놓은 것 (오버라이딩, 오버로딩도 해당된다.)
* Java의 접근 제어자의 종류와 특징
접근 제어자 | 표시 | 설명 |
public | + | 어떤 클래스의 객체에서든 접근 가능 |
private | - | 자신의 클래스에서 생성된 객체들만 접근 가능 |
protected | # | 이 클래스와 동일 패키지에 있거나 상속 관계에 있는 하위 클래스의 객체들만 접근 가능 |
default | ~ | 동일 패키지에 있는 클래스의 객체들만 접근 가능 |
* Object
- 상태와 행위가 존재한다는 의미.
- OOP에서 데이터와 그 데이터에 관련된 동작(함수). 즉 절차, 방법, 기능을 모두 포함한 개념.
* 객체지향 프로그래밍과 절차지향 프로그래밍의 차이
1) 절차지향 프로그래밍
- 실행하고자 하는 절차를 정하고, 이 절차대로 프로그래밍하는 방법
- 목적을 달성하기 위한 일의 흐름에 중점을 둔다.
2) 객체지향 프로그래밍
- 실세상의 물체를 객체로 표현하고, 이들 사이의 관계 및 상호 작용을 프로그램으로 나타냄.
- 객체를 추출하고 객체들의 관계를 결정하고 이들의 상호 작용에 필요한 함수와 변수
- 객체 지향의 행심은 연관되어 있는 변수와 메서드를 하느의 그룹으로 묶어서 그룹핑하는것.
- 사람의 사고와 가장 흡사한 프로그래밍 기법
- 하나의 클래스가 여러개의 인스턴스가 될 수 있다.
* static 멤버와 non-static 멤버의 차이
1) static 멤버
- 맴버는 클래스당 하나가 생성된다.
- 맴버가 객체 내부가 아닌 별도의 공간에 생성된다.
- 클래스 맴버라고 부른다.
- 클래스 로딩시에 맴버가 생성된다.
- 객체가 생기기 전에도 이미 생성된다.
- 맴버는 프로그램이 종료되어야지 사라진다.
2) non-static 멤버
- 인스턴스맴버 (맴버는 객체마다 별도로 존재한다.)
- 객체 생성시에 맴버가 생성된다.
- 객체 생성 후 멤버 사용이 가능하다.
- 객체가 사라지면 맴버도 사라진다.
PS : 쉽게 이야기해 클래스 맴버인가 객체 맴버인가의 차이를 둔다.
* Overloading, Override
1) Overloading
- 같은 이름의 메소드를 여러개 정의하는 것을 의미하는데
매개변수의 타입이 다르거나 개수가 달라야 한다.
2) Override
- 상속에서 나온 개념으로써 상위 클래스의 메소드를 하위
클래스에서 재정의하는 것을 의미한다.
* Servlet, JSP
1) Servlet
- 웹프로그래밍에서 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게
전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술.
- 자바를 사용하여 웹을 만들기 위해 필요한 기술로도 볼 수 있다.
2) JSP : Java Server Page의 줄임말로 html에 Java코드를 블록화해서 삼입한것을 의미한다.
* String, Stringbuffer, StringBuilder의 차이.
1) String
- String 객체는 immutable (불변) 이다.
- String 객체는 Heap 메모리 영역에 생성한다.
- 한번 생성이 되면 변경이 불가능한 특징을 가지고있다.
- 일반적으로 짧은 문자열을 사용한다.
2) StringBuffer
- mutable (변함) 특징을 가지고 있다.
- 객체의 공간이 부족하더라도 기존의 버퍼 크기를 늘리며 유연하게 동작하는 특징이 있다.
- String, int, char 등등 타입의 데이터를 concat할때 사용 가능하다.
- + 를 활용해서 데이터 내용을 추가할때 사용하는 기능이랑 같으나
이를 더 간결하게 하기위해 사용한다.
- 각 메서드별로 Synchronized Keyword가 존재한다.
- 쓰레드에 안전한 프로그램이 필요할때 사용.
3) StringBuilder
- 쓰레드에 안전한지 여부가 전혀 관계 없는 프로그램을 개발할 때 사용하면 좋다.
PS : - StringBuffer, StringBuilder의 큰 차이는 각각 멀티쓰레드 환경에서 동기화를 보장하는지
안하는지의 차이이다.
- 성능으로 치면 StringBuilder > String Buffer > String 이렇게 보면 된다.
* int와 Integer의 차이
1) int
- primitive 자료형
- null로 초기화 할 수 없다.
- Boxing (Primitive 자료형 -> Wrapper 클래스)
2) Integer
- Wrapper 클래스 (객체)
- UnBoxing (Wrapper 클래스 -> Primitive 자료형)
- Unboxing을 하지 않으면 산술 연산이 불가능 하지만, null 값을 처리할 수 있다.
- null값 처리가 용이하기 때문에 SQL과 연동할 경우 처리가 용이하다.
- DB에서 자료형이 정수형이지만 null 값이 필요한 경우 VO에서 Integer를 사용할 수 있음.
* 바이트코드
- 자바 가상 머신이 실행하는 명령어의 형태이다.
- 각각의 바이트코드는 1바이트로 구성.
* 기본자료형, 참조자료형
1) 기본자료형
분류 | 이름 | 바이트 수 | 비고 |
정수형 | byte | 1 | -127 ~ + 128 |
short | 2 | ~32,768 ~ + 32,767 | |
int | 4 | ~2,147,483,648 ~ + 2,147,483,648 | |
long | 8 | -9,223,372,036,854,775,808~ +9,223,372,036,854,775,807 | |
실수형 | float | 4 | 단정도 실수형 (유효 자리는 7정도임) |
double | 8 | 배정도 실수형 (유효 자리는 15정도임) | |
문자형 | char | 2 | 유니코드 문자열 |
논리형 | boolean | 1 | true, false |
* 접근 제어자
1) Public
- 모든 접근이 허용된다.
2) Protected
- 같은 패키지에 있는 객체들 중 상속관계의 클래스들만 허용된다.
3) Private
- 현재 클래스 내에서만 허용된다.
4) default
- 같은 패키지에 있는 클래스들만 허용된다.
* 추상클래스 (abstract class)와 인터페이스 (interface)에 대해~~
1) 추상클래스
- abstract를 이용한 미완성 매서드로 형태만 정의해두고 몸체는 없는 상태의 클래스.
- 상속을 진행하고 상속받은 자식클래스에서 반드시 재정의를 해야한다.
그렇지 않으면 컴파일 에러가 발생한다.
- 상속을 통해 기능을 확장하는데에 의미가 크다.
2) 인터페이스
- 추상클래스보다 추상화가 더 높다.
- 기능의 재정의에 큰 의미를 둔다.
- 맴버 변수와 일반 메소드를 가질 수 없으며 오직 상수와, 추상 메소드만 선언가능.
- implement 키워드를 이용하여 상속을 진행.
- 클래스에서 지원하지 않는 다중상속이 가능.
'프로그래밍언어 > 자바. 스프링' 카테고리의 다른 글
[Spring] servlet-context.xml, root-context.xml, web.xml의 차이 (0) | 2020.06.05 |
---|---|
[Java] Web서버와 Was서버의 차이. (0) | 2020.06.04 |
[Spring] 추상클래스와 interface (0) | 2020.05.22 |
[Spring] Interceptor (0) | 2020.05.21 |
[Java] 자바 에러 모음 (0) | 2020.03.23 |