Java 05 - 객체지향개념 1
2021. 6. 22. 22:17ㆍ프로그래밍 언어/JAVA
객체지향의 중요한 개념1
객체지향언어의 특징
- 코드 간의 관계를 맺어줌으로써 적은 노력으로 코드 변경이 가능하다.
- 코드의 재사용성이 높아진다.
- 제어자와 메서드를 이용하여 데이터를 보호한다.
- 코드의 중복을 제거하여 오류를 방지한다.
클래스와 객체
- 클래스란 객체를 정의해 놓은 것이다. (ex 제품 설계도)
- 클래스는 객체를 생성하는데 사용한다.
- 객체란 실재로 존재하는 사물 또는 개념 (ex 제품)
- 객체는 속성과 기능에 따라 용도가 다르다.
- 객체는 인스턴스를 포함하는 일반적 의미이다.
- 객체는 속성과 기능으로 이루어져 있다. (ex 속성: 길이/높이 , 기능:켜기/끄기)
- 속성은 변수로, 기능은 메서드로 정의한다.
인스턴스(Instance)
- 클래스로 부터 인스턴스를 생성하는 것을 '인스턴스화' 라고 한다.
- 인스턴스 생성 -> HashMap map = new HashMap();
- 인스턴스 사용 -> map.put("key","value");
변수
- 클래스 변수(클래스영역): 클래스가 메모리에 올라갈 때 생성되며 같은 클래스의 모든 인스턴스 들이 공유하는 변수이다. static을 붙여서 사용한다.
- 인스턴스 변수(클래스영역): 인스턴스가 생성시 생성되며 각 인스턴스의 개별적인 저장공간이 존재한다.
- 지역 변수(메서드영역): 메서드 내에서 생성시 생성되며 메서드 종료와 함께 소멸된다.
- 클래스변수와 인스턴스변수가 아니면 모두 지역변수이다.
- 인스턴스 변수는 생성시 각기 다른 값을 유지할 수 있지만, 클래스 변수는 모든 인스턴스가 하나의 저장 공간을 공유하므로 항상 공통된 값을 갖는다.
메서드
- 작업을 수행하기 위한 명령문의 집합이다.
- 값을 입력받아 처리하고 결과를 돌려주거나 돌려주지 않을 수도 있다.
- 반복 수행되는 문장을 메서드로 작성하여 반복되는 코드를 줄인다.
- 하나의 메서드는 한가지 기능만 수행하도록 작성하는 것이 좋다.
JVM 메모리 구조
- Method Area: 클래스 정보와 클래스 변수가 저장되는곳이다.
- Call Stack: 메서드의 작업공간으로, 메서드가 호출되면 수행에 필요한 메모리를 할당받고 종료되면 메모리를 반환한다.
- Heap: 인스턴스가 생성되는 공간으로, new 연산자에 의해서 생성되는 배열과 객체는 모두 이곳에 생성된다.
매개변수
- 기본형 매개변수: 변수의 값을 읽기만 할 수 있다.
- 참조형 매개변수: 변수의 값을 읽고 변경할 수 있다.
재귀호출
- 메서드 내에서 자기자신을 반복적으로 호출하는 것을 말한다.
- 반복문으로 대체할 수 있으나, 반복문보다 성능이 떨어진다.
- 코드가 간결하고 이해하기 쉬워진다.
오버로딩
- 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 뜻한다.
- 메서드의 이름은 같고, 매개변수의 개수 또는 타입이 달라야 한다.
public int overloading(int a, int b){
return int a;
}
public int overloading(int a, int b, int c){
return int b;
}
public int overloading(int a, int b, int c, String s){
return int c;
}
생성자
- 인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드를 말한다.
- 모든 클래스에 반드시 하나 이상의 생성자가 있어야 한다.
- 생성자의 이름은 클래스 이름과 같아야 한다.
- 리턴값이 없기 때문에 void를 쓰지 않는다.
- 생성자를 정의하지 않으면 기본 생성자(매개변수가 없는 생성자)가 자동 정의된다.
- this(): 같은 클래스에 다른 생성자를 호출할 때 사용한다.
- this: 인스턴스 자신을 가리킨다. 지역변수와 구분하기 위해 사용한다.
변수의 초기화
- 멤버변수(인스턴스변수, 클래스변수)와 배열은 각 타입의 기본값으로 자동 초기화 된다.
- 지역변수는 사용전에 반드시 초기화를 해줘야 한다.
- 클래스 변수는 처음 한번만 메모리에 올라가기 때문에 참조해도 초기화되지 않는다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
Java 07 - java.lang 패키지 (0) | 2021.07.15 |
---|---|
Java 06 - 객체지향개념 2 (0) | 2021.06.28 |
Java 04 - 조건문과 반복문 (0) | 2021.06.08 |
Java 03 - 연산자 (0) | 2021.06.07 |
Java 02 - 자바 변수의 종류 (0) | 2021.05.16 |