개발자 미니민의 개발스터디

[자바 이론] JAVA 이론 정리

by mini_min

요 며칠동안 간단하게 자바 이론 정리하고 책도 한 번 봐야겠다 ! 

 

자바 👩‍💻

자바는 모든 JAVA 가상머신(JVM) 에서 실행할 수 있다. 

자바는 플랫폼에 독립적인 객체 지향 프로그래밍이다.

자바는 다양한 분야에서 사용된다!

 

실행과정

자바 소스 코드 -> 컴파일러 실행 -> 자바 바이트 코드 -> 자바 인터프리터(해석기) -> 실행

 

컴파일러는 자바 프로그램을 중간 언어 형태인 자바 바이트 코드로 컴파일한다.

자바 바이트 코드는 플랫폼에 상관없이 자바 가상 머신에 의해 실행될 수 있도록 정의된 중간 코드이다. 

자바 바이트 코드로 컴파일이 되면 이후 자바 인터프리터인 자바 가상 머신으로 실행한다.

◻️ 자바 가상 머신 : 자바 바이트 코드를 실행하는 주체이다. JVM이 실행 가능한 환경이면 어디서든 JAVA 실행이 가능하다.

 

◻️ 가비지 컬렉터 : 힙 영역에 할당된 더 이상 사용되지 않는 가비지를 다른 객체가 사용하도록 해제하는 것이다.

특징! : 프로그래머가 구현할 수 없고 할당된 메모리는 명시적으로 해제불가하다.

가비지 컬렉터가 객체를 어떤 순서로 정리하는지 모르고 언제 수행될지도 모른다..

 

정리 대상

-  모든 객체 참조가 null인 경우

- 객체가 블럭 안에서 선언되어 생성되고 블럭이 종료된 경우

- 부모 객체가 null이 된 경우, 자식 객체는 자동적으로 GC 대상이 된다.

- 객체가 약한 참조만 가지고 있을 때

- 객체가 강한 참조지만, 메모리 부족이 발생한 경우

 

자바 자료형

자바는 8가지 기본 제공 타입이 있다

: boolean, byte, short, int, long, float, double, char

 

자바에서 제공하는 참조형이 있다!

- 배열 참조형 : 배열 객체를 참조하기 위한 자료형

- 클래스 참조형 : 클래스 객체를 참조하기 위한 자료형

- 인터페이스 참조형 : 인터페이스 객체를 참조하기 위한 자료형

- enum 참조형 : 열거형 타입 

 

 

객체 지향 ?

객체 지향이란 실제 세계를 모델링하여 소프트웨어를 개발하는 기법이다.

"실제 세계" 와 "모델링"이 포인트

그래서 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체로 만들고, 객체 간의 유기적인 상호작용을 통해 로직을 구성하는 것이다!!

 

[현실 개체] -> 객체[속성 + 메소드] 

객체 지향 언어 종류 : 자바, C++, C#, Python

 

◻️ 특징

- 데이터 중심

- 관리하는 데이터를 정의하고 이에 필요한 명령어를 추가한다.

- 성능보다는 개발의 편리성과 효율서을 높이는데 목적이 있다.

- 프로그램 모듈을 재사용할 수 있다.

- 프로그램의 확장 및 유지 보수가 용이하다.

 

객체

객체는 그 객체의 상태를 나타내는 변수와 메소드의 소프트웨어적 모듈이다!

관련 코드와 데이터를 하나로 묶은 구성 단위라고 본다.

객체는 개발 시간에는 레퍼런스 변수로 정의하고 실행 시간에는 클래스의 인스턴스를 의미한다!

 

◻️ 클래스

: 클래스는 객체 지향 프로그래밍에서 특정 객체를 생성하기 위해 속성과 메소드를 정의하는 하나의 틀이다.

: 클래스는 객체를 정의하기 위한 속성 + 메소드로 구성된다.

◻️ 추상화

: 객체에서 공통되는 것, 공통적인 속성과 행위를 추출하는 것이다 (모델링!)

하나의 현실 세계의 사물이 있다면 데이터적인 측면과 기능적인 측면을 통해서 정의하는 것이다.

객체 지향적인 관점에서 클래스를 정의하는 것도 추상화라고 정의가 가능하다.

 

◻️ 캡슐화

: 객체의 속성과 행위를 하나로 묶어서 실제 구현 내용은 외부에 안보여주고 은닉한다.

외부에서 개체 내부 정보를 직접 접근하거나 조작할 수 없다. 

외부에서 접근할 수 있게 정의된 오퍼레이션을 통해서만 관련 데이터에 접근할 수 있다. 

-> 인터페이스는 공개하고 구현부는 감추는 것!!

 

◻️ 캡슐화 장점

- 데이터 보호 

- 추상화 용이함 

- 제공자와 이용자를 명확히 분리한다.

- 사용이 쉽다

- 객체 내의 데이터 구조가 바뀌어도 다른 객체에 영향을 주지 않는다.

- 객체 간의 독립성이 보장된다.

- 변경이 용이하고 재사용성이 증대된다. 

 

◻️ 다형성

: 다형성은 프로그래밍 언어의 자료형 체계의 성질을 나타내는 것이다. 

하나의 객체가 있으면 여러 가지 타입을 대입할 수 있다는 것을 의미한다!

Overriding(수직적) 과 Overloading(수평적) 이 있다. 

 

Overriding / Overloading

오버라이딩 : 메소드를 재정의하는 것이다. 상위 클래스를 상속받았을 때 상위 클래스에 있는 메소드를 재정의한다. 

이것이 바로 다형성.. 

메소드 이름, 리턴 타입, 매개변수의 수, 타입 모두모두 완전히 일치해야한다. 

final, static, private 메소드는 오버라이드 할 수 없다. 

 

오버로딩 : 메소드 중복 정의다. 기능은 같은데 메소드의 인수의 개수가 다르거나, 자료형이 다르면서 동일한 이름일 때 정의하는 것이 오버로딩이다. 

 

 

abstract 클래스 (추상 클래스)

: 추상 클래스는 선언만 있고 정의는 없는 하나 이상의 추상 메소드를 갖는 클래스다.

하위 클래스에서 오버라이팅 (어차피 재정의) 할 거라고 예상되는 메소드를 미리 호출할 계획을 세워 두기 위해 만든다.

- new 로 객체 생성은 불가하다.

- 상속 받은 클래스는 추상 메소드를 구현해야 인스턴스를 생성할 수 있다.

 

 Interface 인터페이스 

인터페이스는 '완전히 미완성'

인터페이스 안에 어떠한 메소드도 몸체가 없다. 실행 부분이 존재하지 않는 클래스를 위한 템플릿 기능을 한다. 

(추상 클래스의 한 종류다.)

- new 로 객체 생성 불가

- 모든 변수는 static 이고 final 이다.

- 다중 상속이 가능하다.

- JDK 8.0부터 static 메소드 작성이 가능하다. 인스턴스명만으로 호출이 가능하다.

- 구현 클래스에서는 implements 키워드를 이용해 인터페이스를 구현한다.

 

◻️ 장점

- 개발 시간 단축 가능

- 표준화 가능

- 서로 관계 없는 클래스끼리 관계 형성이 가능하다.

- 독립적인 프로그래밍이 가능하다. 

 

 

주요 클래스

Immutable

: 이뮤터블은 생성 후 변경 불가한 객체다!

set 메소드와 void 리턴 타입의 메소드도 없다. 

멤버 변수 값도 변경 불가하다. 

대표적인 Immutable 클래스는 String, boolean, Integer, Float, Long 등이 있다.

 

◻️ String 클래스

- 문자열을 나타내는 

◻️ StringBuffer / StringBuilder 클래스

버퍼랑 빌더 모두 Serializable (직렬화), CharSequence (순차적 문자 읽는 메소드 제공), Comparable (순서 정의) 인터페이스가 구현된 final class 이다. 

해당 클래스들은 append(), insert() 메소드를 이용하여 주어진 데이터를 문자열로 변환하여 해당 문자열의 문자를 기존 객체의 문자열 버퍼에 추가하거나 삽입한다. 

두 클래스는 버퍼가 가변적인 길이를 가져서 객체 생성 시점에서 미리 그 크기 값을 지정하거나 실행 시간에 버퍼의 크기를 바꿀 수 있다. 

 

 

 

 

 

 

 

블로그의 프로필 사진

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기