백엔드/Java의 정석

TIL 정리_06

ran4 2022. 2. 21. 21:52

 

객체지향 언어

 

객체지향이론의 기본 개념 :

실제 세계는 사물(객체)로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다.

주요특징

1. 코드의 재사용성이 높다

ㄴ새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다

2. 코드의 관리가 용이하다.

ㄴ코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.

3. 신뢰성이 높은 프로그래밍을 가능하게 한다.(규모가 큰 것도 OK)

ㄴ제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며,

코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다 

 

=>코드의 재사용성이 높고 유지보수가 용이하다 

 

클래스

객체를 정의해 놓은 것이자 객체의 설계도 또는 틀이다.

클래스의 정의 : 객체를 정의해 놓은 것

클래스의 용도 : 객체를 생성하는데 사용

 

객체의 정의 : 실제로 존재하는 것 사물 또는 개념

객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름

 

클래스와 객체의 예

클래스 객체
제품 설계도 제품
Tv 설계도 TV
붕어빵 기계  붕어빵

 

객체와 인스턴스

클래스로부터 만들어진 객체를 인스턴스(instance)라고 한다.

클래스 —>인스턴스화(제품생성) ㅡ> 인스턴스(객체)

 

객체의 구성요소 - 속성과 기능

속성 : 멤버변수(member variable) , 특성(attribute), 필드(field), 상태(state)

기능 : 메서드(method), 함수(function), 행위(behavior)

 

인스턴스의 생성과 사용

클래스명 변수명;                           Tv t;

변수명 = new 클래스명();                Tv t = new TV():

 

"인스턴스는 참조변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스 타입과 일치해야 한다."

= 참조변수가 없으면 객체 사용불가 

 

객체 배열 

객체 배열 안에 객체의 주소를 저장, 참조변수들을 하나로 묶은 참조변수 배열이라 볼 수 있다.

Tv tv1, tv2 tv3; > Tv[] tvarr = new Tv[3]; //길이가 3인 Tv타입의 참조변수 배열

tvArr = 참조변수 배열

 

**객체배열과 객체생성을 따로 해줘야 한다, 객체 배열도 같은 타입의 객체만 저장할 수 있다.**

 

클래스의 또 다른 정의 

프로그래밍적인 관점에서의 클래스의 정의

클래스 - 데이터와 함수의 결합 

 

데이터 저장개념의 발전과정 

변수 => 배열 => 구조체 => 클래스 

 

변수 : 하나의 데이터를 저장할 수 있는 공간

배열 : 같은 종류의 데이터를 하나로 저장할 수 있는 공간

구조체 : 서로 관련된 여러 데이터를 종류에 관계없이 하나로 저장할 수 있는공간

(서로 관계있는 것들을 묶음)

클래스 : 데이터와 함수의 결함( 구조체 + 함수)

 

클래스의 또 다른 기능

사용자 정의 타입 여러개의 변수를 묶어 원하는 타입을 직접 만들 수 있다

비 객체지향 객체지향 타입(참조변수 t사용)
int hour1, hour2, hour3;
int minute1, minute2, minute3
float seond1, second2, second3
Time t = new Time();
Time t2 = new Time();
Time t3 = new Time();

 

선언위치에 따른 변수의 종류

변수는 클래스 변수(cv), 인스턴스 변수(iv), 지역변수(lv) 모두 3종류가 있다

클래스 변수과 인스턴스 변수

무늬 숫자 (개별) //객체마다 다르게 유지되어야 함 >iv

, 높이(공통) //클래스 변수 > cv 

iv는 객체마다 만들어지고 cv는 다른공간에 한개만 만들어진다

변수의 종류 선언위치 생성시기
클래스 변수(아무때나 사용가능) cv 클래스 영역 클래스 메모리에 올라갈 때
(필요할 때)
인스턴스 변수(객체생성을 해야 사용가능) iv **인스턴스가 생성되었을 때 **
지역변수 lv
(메서드 종료시 자동제거)
클래스 영역 이외의 영역
(메서드, 생성자, 초기화 블럭 내부)
변수 선언문이 수행되었을 때

객체 = iv 변수를 묶어놓은 것

 

class variables

{

int iv; //클래스 영역 인스턴스 변수선언

static int cv; //클래스 변수 (static변수)

void method() //메서드 선언

{

int lv = 0; // 메서드 영역 지역변수(local variable) 메서드 종료시 자동제거

}

}//클래스 끝

 

메서드

-특정 작업을 수행하는 일련의 문장들을 하나로 묶은것이다.

-메서드는 클래스 안에 존재해야 한다

 

메서드의 장점

코드의 중복을 줄일 수 있고

코드의 관리가 쉽다

코드를 재사용 할 수 있다

코드가 간결해서 이해가 쉽다

 

메서드의 작성

반복적으로 수행되는 여러문장을 메서드로 작성

하나의 메서드는 한가지 기능만 수행하도록 작성

매서드 = 선언부 + 구현부

 

메서드의 선언과 구현 

값(입력)을 받아서 처리하고, 결과를 반환(출력)

반환타입 메서드이름 (타입 변수명, 타입 변수명, ---){ -선언부

//메서드 호출시 수행될 코드 -구현부 

**메서드의 이름은 변수의 명명규칙대로 작성해야하고, 이름만으로도 기능을 알 수 있도록 노력해야한다.

 

반환타입

반환 타입이 없을 때 : void를 적어야한다

 

메서드의 구현부

메서드의 선언부 다음에 오는 괄호{ }를 메서드의 구현부라고 한다.

 

Return문

실행중인 메서드를 종료하고 호출한 곳으로 돌아간다

메서드의 반환타입이 'void'가 아닌경우, 구현부{ } 안에 'return 반환값;'이 반드시 포함되어야 한다.

매개변수와 달리 return문은 단 하나의 값만 반환할 수 있다.

 

지역변수(lv) : 메서드 내에 선언된 변수 

매개변수도 메서드 내에 선언된 것으로 간주되므로 지역변수이다.

 

메서드의 호출

메서드이름(값1, 값2, ---); //메서드를 호출하는 방법 

print99danAll(); //void print99danAll()을 호출

int result = add(3, 5); // int add(int x, int y)를 호출하고 result에 저장

 

메서드의 실행흐름

같은 클래스 내의 메서드끼리는 참조변수를 사용하지 않고도 서로 호출이 가능하지만

static메서드는 같은 클래스 내의 인스턴스 메서드를 호출할 수 없다.

 

JVM의 메모리 구조 

응용프로그램이 실행되면, JVM은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고

JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.

1. 메서드 영역

클래스가 사용되면 해당 클래스파일을 읽고 저장한다.

2. 힙(heap)

인스턴스가 생성되는 공간(iv 생성)

3. 호출스택(call stack or execution stack)

스택(stack) : 밑이 막힌 상자. 위에 차곡차곡 쌓인다.

메서드 수행에 필요한 메모리가 제공되는 공간

메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제

 

매개변수 **중요**

기본형 매개변수 변수의 값을 읽기만 할 수 있다(read only)

참조형 매개변수 변수의 값을 읽고 변경할 수 있다(read&write)

기본형 boolean, int, float, double, short, long, byte, char 8

참조형 그 외

 

매개변수의 유효성 검사

구현부{ }를 작성할 때, 매개변수의 값이 적절한 것인지 확인하는것이 중요하다.

메서드를 작성할 때 매개변수의 유효성 검사하는 코드를 반드시 넣어야한다. 

 

 

'백엔드 > Java의 정석' 카테고리의 다른 글

TIL 정리_08  (0) 2022.02.23
TIL 정리_07  (0) 2022.02.22
TIL 정리_05  (0) 2022.02.21
TIL 정리_04  (0) 2022.02.19
TIL 정리_03  (0) 2022.02.18