객체 지향 언어를 사용하는 이유
- 캡슐
- 상속
- 추상화
- 다형성
클래스 : 객체를 정의해놓은것
- 객체를 생성하는데 사용
- 변수 + 메서드
- 사용자 정의 타입
객체 : 실제로 존재하는 것
- 용도는 객체가 가지고 있는 기능과 속성에 따라 다르다.
인스턴스 : 어떠한 클래스로 부터 만들어진 객체
- 클래스로 부터 객체를 만드는 과정을 클래스의 인스턴스화
객체의 구성 요소
- 속성 : 멤버 변수, 특성, 필드, 상태 ( ex. 크기, 길이, 높이, 색상, 볼륨 ..)
- 기능 : 메서드, 함수, 행위 (ex. 켜기, 끄기, 볼륨 높이기, 볼륨 낮추기...)
인스턴스의 생성과 사용
클래스명 변수명; //클래스의 객체를 참조하기 위한 변수 선언
변수명 = new 클래스명(); //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
TV t; //TV클래스 타입의 참조변수 t를 선언
t = new TV(); //Tv인스턴스를 생성 후, 생성된 TV인스턴스의 주소를 t에 저장
※ 인스턴스는 참조 변수를 통해서만 다룰 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
데이터와 함수의 결합입(클래스)
- 변수 : 하나의 데이터를 저장 할 수 있는 공간
- 배열 : 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간
- 구조체 : 서로 관련된 여러 데이터를 종류에 관계 없이 하나의 집합으로 저장할 수 있는 공간
- 클래스 : 데이터화 함수의 결합(구조체 + 함수)
사용자 정의 타입(클래스)
- 기본적으로 제공하는 자료형 외에 서로 관련된 변수를 묶어서 하나의 타입으로 새로 추가하는 것을 사용자 정의 타입
변수와 메서드
선언 위치에 따른 변수의 종류
//cv = static + iv
{int iv; //인스턴스 변수 //클래스 영역 iv
static int cv; //클래스 변수(static 변수, 공유변수)
void method()//메서드 영역 lv
{
int lv = 0; //지역변수 메서드
}
}
변수의 종류와 특징
클래스 변수(cv)
- 선언 위치 : 클래스 영역
- 생성 시기 : 클래스가 메모리에 올라갔을 때
인스턴스 변수(iv)
- 선언 위치 : 클래스 영역
- 생성시기 : 인스턴스가 생성되었을 때
지역변수 (lv)
- 선언 위치 : 클래스 영역 이외 영역(메서드, 생성자, 초기화 블럭 내부)
- 생성 시기 : 변수 선언문이 수행되었을 때 선언된 블럭을 벗어나면 소멸되어 사용할 수 없다.
인스턴스 변수는 인스턴스가 생성될 때 마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만, 클래스 변수는 모든 인스턴스가 하나의 저장 공간을 고유하므로, 항상 공통된 값을 갖는다.
※참조변수를 통해서도 클래스 변수를 사용하거나 변경 할 수 있다.
메서드 : 특정 작업을 수행하는 일련의 문장을 하나로 묶은 것. 수학의 함수와 유사
- 높은 재사용성
- 중복된 코드의 제거
- 프로그램의 구조화
반환타입 메서드이름 (타입 변수명, 타입변수명,....) //선언부 반환타입(출력) 메서드이름(이름) 타입변수명(이름)
{//메서드 호출시 수행될 코드 //구현부
}
※매개변수의 선언시 일반적인 변수 선언과는 달리 두 변수의 타입이 같아도 변수의 타입을 생략 할 수 없다.
반환 타입 : 메서드의 출력 결과를 반환하는 타입을 적는다. 반환값이 없는 경우 void를 사용
return문 : void가 아닌 경우 구현부 안에 return 반환값; 을 반드시 포함시켜야한다. 이 값의 타입은 반환타입과 일치하거나 자동형변환이 가능한 것이어야 한다. 모든 메서드에는 적어도 1개의 return문이 있어야 하지만 void의 경우 컴파일러가 자동으로 추가해준다.
지역변수(lv) : 메서드 내에 선언된 변수들은 그 메서드 내에서만 사용할 수 있다.
메서드의 호출 : 메서드이름(값1, 값2, ....); ///메서드를 호출하는 방법
- 인자 : 메서드 호출시 인자의 개수와 순서는 호출된 메서드에 선언된 매개 변수와 일치 해야한다.
매개변수의 유효성검사 : 입력 값을 체크하여 타입에 맞지 않는 변수를 사용하도록 해서는 안된다.
'IT > Java' 카테고리의 다른 글
Overloading (0) | 2019.06.23 |
---|---|
JVM 메모리 구조 (0) | 2019.06.23 |
다차원 배열 (0) | 2019.06.18 |
String 배열 (0) | 2019.06.18 |
배열 (0) | 2019.06.18 |
댓글