1. 객체 지향 프로그래밍?
객체를 국어 사전에서 찾아보면 '의사나 행위가 미치는 대상'이라 설명한다.
우리 주위에 있는 객체를 생각해 보면 사람, 자동차, 건물 등이 있다. 즉 눈에 보이는 사물은 모두 객체인 것이다.
그런데 눈에 보이지 않는 것도 객체가 될 수 있다. 주문, 생산, 관리 등의 행동들을 말이다.
이제부터 공부할 자바 객체 지향 프로그래밍(Objet-Oriented Programming;OOP)은 객체를 기반으로 하는 프로그램이다.
우선 객체 지향 프로그램이 어떤 '객체'를 가지고 프로그래밍을 하는 것이라는 개념을 염두해두고 시작해보자.
학생일 때를 다시 떠올리며, 아침에 일어나 학교까지 가기 위해 나에게 어떤 일이 벌어질까.
[일어난다 → 씻는다 → 아침밥을 먹는다 → 버스를 탄다 → 지하철을 탄다 → 걷는다 → 학교 도착]의 흐름이 있다.
이렇게 순서대로 일어나는 일을 시간 순으로 프로그래밍하는 것을 절차 지향 프로그램이라고 한다.
* 절차 지향 프로그래밍의 대표 언어가 C 언어이다.
반면에 객체 지향 프로그램이란 객체를 정의하고 객체 간 협력을 프로그래밍하는 것이다.
위의 상황에서 객체란 학생, 밥, 버스, 지하철, 학교 등이 있는 것이다.
밥을 먹는다는 행동은 '학생'이란 객체와 '밥'이란 객체가 협력함으로 일어나는 행동인 것이다.
이렇듯 객체를 만들고, 객체 사이에 일어나는 일을 구현하는 것이 객체 지향 프로그래밍인 것이다.
따라서 객체 지향 프로그래밍을 할 때는 객체를 먼저 정의하고 각 객체가 어떤 기능을 제공하고 협력할 수 있도록 구현할 것인지를 고민하여야 한다.
2. 패키지란?
패키지는 클래스 파일의 묶음이다.
패키지를 만들면 프로젝트 하위에 물리적인 디렉터리가 생성이 되며 계층 구조를 가지게 된다.
예를 들어 학교와 관련된 프로젝트를 수행할 때 '학생', '과목', '교실', '담당 교수' 등의 클래스를 만들 수 있고 이 클래스들과 협력하는 다른 클래스가 생성될 수 있다.
이 때 패키지를 통하여 다양한 클래스들을 구분하여 구성할 수 있다.
패키지 선언은 클래스의 맨 위에서 한다.
만약 클래스의 이름이 같다고 해도 패키지의 이름이 다르면 두 클래스는 다른 클래스가 된다.
이제 클래스가 무엇인지 알아보자.
3. 클래스란?
객체 지향 프로그램은 클래스를 기반으로 프로그래밍한다.
클래스는 객체의 속성과 기능을 코드로 구현한 것으로 객체를 클래스로 구현하는 것을 '클래스를 정의한다'고 한다.
클래스를 정의하려면 우선 클래스 이름과 클래스가 가지는 속성 또는 특성이 필요하다.
위의 상황을 다시 가져와서 '학생'이라는 객체를 클래스로 살펴보자.
먼저 클래스의 이름은 Student라고 했다.
이제 학생 객체가 가질 수 있는 일반적인 속성을 생각해보자. 학번, 이름, 학년, 사는 곳 등이 있을 것이다.
이런 속성들은 특성이라고도 하고 클래스 내부에 변수로 선언한다.
이렇게 선언하는 클래스의 속성을 '멤버 변수'라고 한다.
클래스를 정의하는 문법은 아래와 같다.
(접근 제어자) class 클래스 이름 {
멤버 변수;
메서드;
}
// 클래스 이름 앞에 있는 public 예약어는 '접근 제어자'라고 하며 이후에 차근 차근 배울 예정이다. 여기서는 public class일 경우에 클래스 이름과 자바 파일 이름이 같아야 한다는 정도만 알고 넘어가면 된다.
이제 이클립스로 학생 클래스를 정의해보자.
package classpart;
public class Student { // 클래스를 만드는 예약어와 클래스의 이름
int studentID;
String studentName;
int grade;
String address; // 멤버 변수
}
학생이라는 객체의 속성을 클래스의 멤버 변수로 선언했다.
이 때 각 변수 속성에 맞는 자료형을 사용해야 한다.
또한 자바 프로그램은 모든 요소가 클래스 내부에 있어야 한다.
클래스 외부에는 package 선언과 import 문장 외에 아무것도 선언하지 않는다.
* 클래스 이름을 짓는 규칙
자바에서 클래스 이름은 대문자로 시작한다. 소문자로 시작한다고 해서 오류가 발생하는 것은 아니지만 대문자로 시작하는 것이 개발자들 사이의 규칙이다. 이러한 규칙을 코딩 컨벤션(coding convension)이라고 한다.
4. 클래스 살펴보기
클래스를 다시 살펴보면 각 멤버 변수에 맞는 자료형을 선언해주고 있다.
정수로 나타내어야 하는 수는 int형으로 선언했고, 여러 개의 문자로 이루어진 문자열로 표현할 땐 자바에서 제공하는 String 클래스를 사용한다.
* String 클래스는 아직 배우지 않았다, 지금은 우선 문자가 여러 개 이어진 문자열은 String형으로 선언한다는 정도만 이해하고 넘어가자.
그렇다면 이번엔 '사람'이라는 객체를 구현하는 Person 클래스를 만들어보자.
package classpart;
public class Person {
String name;
int height;
double weight;
char gender;
boolean married;
}
멤버 변수로 이름, 몸무게, 키, 성별, 결혼 여부를 선언했다.
위와 같이 멤버 변수를 선언할 때 기본 자료형으로도 선언할 수 있고 다른 클래스형으로 선언할 수 있다.
클래스형이란 다른 말로 객체 자료형 또는 참조 자료형이라고 한다.
참조 자료형으로 사용하는 클래스는 String, Date와 같이 이미 JDK에서 제공하는 것일 수도 있고, 개발자가 직접 만든 Student나 Person 같은 클래스가 다른 클래스에서 사용하는 멤버 변수의 자료형이 될 수도 있다.
5. 클래스 기능을 구현하는 메서드
지금까지 클래스를 선언하고 멤버 변수를 선언하는 방법을 익혔다.
그런데 클래스에서는 학생 객체가 가지는 속성을 사용해 학생과 관련된 기능을 구현할 수 있다.
예를 들어 학생에게 이름을 부여한다, 학생이 사는 곳을 출력한다 처럼 말이다.
이렇게 멤버 변수를 사용하여 클래스 기능을 구현하는 것을 '멤버 함수' 또는 '메서드'라고 한다.
메서드에 대해 자세히 알아보기 전에 학생 이름과 주소를 출력하는 메서드를 우선 만들어보자.
package classpart;
public class Student {
int studentID;
String studentName;
int grade;
String address;
public void showStudentInfo() {
System.out.println(studentName + "," + address);
}
}
위 코드를 보면 Student 클래스 안에 showStudentInfo() 메서드를 추가했다.
이 메세지는 학생 이름과 주소를 출력하는 기능이며 메서드를 구현하고 사용하는 방법에 대해 차근 차근 다뤄보려한다.
'⁂ Java > : 독학으로 공부하기(과거)' 카테고리의 다른 글
[java] #4-3 클래스와 인스턴스 (0) | 2022.07.06 |
---|---|
[java] #4-2 메서드와 함수 (0) | 2022.07.04 |
[java] #3-2 반복문 : 제어 흐름 이해하기 (0) | 2022.07.03 |
[java] #3-1 조건문 : 제어 흐름 이해하기 (0) | 2022.07.01 |
[java] #2-2 비트 연산자 (0) | 2022.07.01 |