1 객체지향 프로그래밍
1.1 객체지향언어
- 객체지향언어는 기존의 프로그래밍 언어와 다른 전혀 새로운 것이 아니라, 기존의 프로그래밍 언어에 몇 가지 새로운 규칙을 추가한 보다 발전된 형태의 것이다. 이러한 규칙들을 이용해서 코드 간에 서로 관계를 맺어 줌으로써 보다 유기적으로 프로그램을 구성하는 것이 가능해졌다.
1.2 객체지향언어 특징
1.2.1 코드의 재사용성이 높다.
- 새로운 코드를 작성할 때 기존의 코드를 이용하여 쉽게 작성할 수 있다.
1.2.2 코드의 관리가 용이하다.
- 코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수 있다.
1.2.3 신뢰성이 높은 프로그래밍을 가능하게 한다.
- 제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지하도록 하며, 코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할 수 있다.
1.3 클래스와 객체
1.3.1 클래스와 객체의 정의와 용도
클래스란 ‘객체를 정의해놓은 것.’ 또는 클래스는 ‘객체의 설계도 또는 틀’ 이라고 정의할 수 있다.
클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성된다.
- 클래스의 정의 – 클래스란 객체를 정의해 놓은 것이다.
- 클래스의 용도 – 클래스는 객체를 생성하는데 사용된다.
객체의 정의는 ‘실제로 존재하는 것’ 이다. 우리가 주변에서 볼 수 있는 사물들이 곧 객체이다. 객체지향 이론에서는 사물과 같은 유형적인 것뿐만 아니라, 개념이나 논리와 같은 무형적인 것들도 객체로 간주하며, 프로그래밍에서의 객체는 정의된 내용대로 메모리에 생성된 것을 뜻한다.
- 객체의 정의 – 실제로 존재하는 것. 사물 또는 개념
- 객체의 용도 – 객체가 가지고 있는 기능과 속성에 따라 다름
- 유형의 객체 – 책상, 의자, 자동차, TV와 같은 사물
- 무형의 객체 – 수학공식, 프로그램 에러와 같은 논리나 개념
1.3.2 객체와 인스턴스
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화(instantiate)라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스(instance)라고 한다.
1.3.3 객체의 구성요소 – 속성과 기능
- 객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다.
- 객체는 속성과 기능의 집합이라고 할 수 있으며, 객체가 갖고 있는 속성과 기능을 그 객체의 멤버(구성원)라 한다.
- 클래스란 객체를 정의한 것이므로 클래스에는 객체의 모든 속성과 기능이 정의되어있다.
- 클래스로부터 객체를 생성하면, 클래스에 정의된 속성과 기능을 가진 객체가 만들어지는 것이다.
1.3.4 인스턴스의 생성과 사용
- 인스턴스를 생성하는 방법은 여러 가지가 있지만 일반적으로 다음과 같이 한다.
1.4 변수와 메서드
- 인스턴스 변수 (Instance variable)
n 각 인스턴스의 개별적인 저장공간으로 인스턴스마다 다른 값을 저장할 수 있다.
n 인스턴스 생성 후, “참조변수. 인스턴스변수명”으로 접근할 수 있다.
n 인스턴스를 생성할 때 생성되고, 참조 변수가 없을 때 가비지 컬렉터에 의해 자동으로 제거된다.
- 클래스 변수 (Class variable)
n 같은 클래스의 모든 인스턴스들이 공유하는 변수이다.
n 인스턴스 생성 없이 “클래스이름. 클래스변수명”으로 접근할 수 있다.
n 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸된다.
- 지역 변수 (Local variable)
n 메서드 내에 선언되며 메서드의 종료와 함께 소멸된다.
n 조건문, 반복문의 블록({}) 내에 선언된 지역변수는 블록을 벗어나면 소멸된다.
- 인스턴스 변수는 인스턴스가 생성될 때마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있다.
- 클래스 변수는 모든 인스턴스가 하나의 저장공간을 공유하기 때문에 항상 공통된 값을 갖는다.
- 메서드의 정의
n 메서드란 작업을 수행하기 위한 명령문의 집합을 의미한다.
n 어떤 값을 입력 받아서 처리하고 그 결과를 돌려준다. 이 때, 입력 받는 값이 없을 수도 있고 결과를 돌려주지 않을 수도 있다.
- 메서드의 장점과 작성지침
n 반복적인 코드를 줄이고 코드의 관리가 용이하게 된다.
n 반복적으로 수행되는 여러 문장을 메서드로 작성한다.
n 하나의 메서드는 한 가지 기능만 수행하도록 작성하는 것이 좋다.
n 관련된 여러 문장을 메서드로 작성한다.
- 메서드 정의 방법
n 메서드는 클래스 영역 안에서만 정의할 수 있다. 즉, 메서드 내에 메서드를 정의할 수 없다.
- 메서드가 정상적으로 종료되는 경우
n 메서드의 블록({})의 끝에 도달했을 때 메서드가 종료된다.
n 메서드의 블록({})을 수행 도중 return문을 만났을 때 메서드가 종료된다.
- return문
n 현재 실행 중인 메서드를 종료하고 호출한 메서드로 되돌아 가는 것을 의미한다.
n 반환값이 없는 경우와 반환 값이 있는 경우가 있는데, 반환값이 없는 경우는 return문만 써주면 되고, 반환값이 있는 경우는 return문 뒤에 반환 값을 지정해 주어야 한다.
n 반환값이 있는 메서드는 모든 경우에 return문이 있어야 한다.
n return문의 개수는 최소화하는 것이 좋다.
- 메서드 호출 방법
1) 메서드에 선언된 매개변수가 없는 경우
참조변수. 메서드명( );
2) 메서드에 선언된 매개변수가 있는 경우
참조변수. 메서드명(값1, 값2, …);
- 메서드 영역 (Method Area)
n 클래스 정보와 클래스 변수가 저장되는 곳이다.
- 호출 스택 (Call Stack)
n 메서드의 작업 공간이다.
n 메서드가 호출되면 메서드 수행에 필요한 메모리 공간을 할당 받고, 메서드가 종료되면 사용하던 메모리를 반환한다.
- 힙 (Heap)
n 인스턴스가 생성되는 공간이다.
n new 연산자에 의해서 생성되는 배열과 객체는 모두 힙에 생성된다.
- 호출 스택의 특징
n 메서드가 호출되면 수행에 필요한 메모리를 스택에 할당 받는다
n 메서드가 수행을 마치면 사용했던 메모리를 반환한다.
n 호출 스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.
n 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.
- 기본형 매개변수
n 변수의 값을 읽기만 할 수 있다.
- 참조형 매개변수
n 변수의 값을 읽고 변경할 수 있다.
- 인스턴스 메서드
n 인스턴스 생성 후 “참조변수. 메서드이름()”으로 호출한다.
n 인스턴스 변수나 인스턴스 메서드와 관련된 작업을 하는 메서드이다.
n 메서드 내에서 인스턴스 변수를 사용할 수 있다.
- 클래스 메서드
n 객체 생성 없이 “클래스이름. 메서드이름()”으로 호출한다.
n 인스턴스 변수나 인스턴스 메서드와 관련 없는 작업을 하는 메서드이다.
n 메서드 내에서 인스턴스 변수를 사용할 수 없다.
n 메서드 내에서 인스턴스 변수를 사용하지 않는다면 static을 붙이는 것을 고려한다.
1.5 메서드 오버 로딩
- 메서드 오버 로딩이란 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 의미한다.
- 메서드의 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 매개변수는 같고 리턴 타입이 다른 경우는 오버 로딩이 성립되지 않는다.
'와사비크래커 IT Tip > 언어' 카테고리의 다른 글
[JAVA] 변수의 초기화 (0) | 2020.09.03 |
---|---|
[JAVA] 생성자 (Constructor) (0) | 2020.09.02 |
[JAVA] 배열 (0) | 2020.09.01 |
[JAVA] 조건문과 반복문 (0) | 2020.08.31 |
[JAVA] 연산자 (0) | 2020.08.31 |