이번 포스팅에서는 자바(Java)에서 객체 지향 프로그래밍과 클래스에 대하여 공부를 해보고자 한다.
객체와 객체 지향 프로그래밍
객체는 사전적 의미로 '의사나 행위가 미치는 대상'이라고 설명된다.
즉, 눈에 보이는 사물은 모두 객체라고 할 수 있다.
하지만 눈에 보이지 않는 것도 객체가 될 수 있다.
주문, 생산, 관리 등 어떤 행동을 나타내는 단어도 객체가 될 수 있다.
객체 지향 프로그래밍(Object-Oriented Programming; OOP)은 객체를 기반으로 하는 프로그램이다.
객체 지향 프로그래밍이란 객체를 정의하고 객체 간 협력을 프로그래밍하는 것이라고 할 수 있다.
'어떤 대상(객체)을 가지고 프로그래밍한다.'
객체 지향 프로그램은 먼저 객체를 만들고 객체 사이에 일어나는 일을 구현하는 것이다.
객체 지향 프로그래밍을 할 때는 객체를 먼저 정의하고 각 객체가 어떤 기능을 제공하고 객체 간 협력을 어떻게 구현할 것인지 고민해야 한다.
클래스란
클래스(class)는 객체의 속성과 기능을 코드로 구현한 것이다.
객체를 클래스로 구현하는 것을 '클래스를 정의한다'라고 한다.
클래스를 정의하려면 우선 클래스 이름과 클래스가 가지는 속성 또는 특성이 필요하다.
객체 지향 프로그램은 클래스를 기반으로 프로그래밍한다.
클래스를 정의하는 문법
(접근 제어자) class 클래스 이름 {
멤버 변수;
메서드;
}
클래스 이름 짓는 규칙
자바에서 클래스 이름은 대문자로 시작한다.
소문자로 시작한다고 해서 오류가 발생하는 것은 아니지만, 대문자로 시작하는 것이 개발자들 사이의 규칙이다.
클래스 속성을 구현하는 멤버 변수
클래스 내부에 선언하여 객체 속성을 나타내는 변수가 멤버 변수(member variable)이다.
public static Student{
int studentID; //학번
String studentName; //학생 이름
int grade; //학년
String address; //사는 곳
}
- 클래스에서 선언하는 멤버 변수는 다른 말로 속성(property), 특성(attribute) 등으로 표현하기도 한다.
- 멤버 변수는 속성이 무엇이냐에 따라 알맞은 자료형을 선언해주어야 한다.
멤버 변수를 선언할 때 int 형, double 형 같은 기본 자료형(primitive data type)으로 선언할 수도 있고, 또 다른 클래스형으로 선언할 수도 있다.
클래스형이란 다른 말로 객체 자료형 또는 참조 자료형이라고 한다.
참조 자료형으로 사용하는 클래스는 String, Date와 같이 이미 JDK에서 제공하는 것일 수도 있고, 개발자가 직접 만든 클래스가 다른 클래스에서 사용되는 멤버변수의 자료형이 될 수도 있다.
클래스 기능을 구현하는 메서드
클래스 내부에서 멤버 변수를 사용하여 클래스 기능을 구현한 것을 '멤버 함수(member function)' 또는 '메서드(method)'라고 한다.
예제
public static Student{
int studentID;
String studentName;
int grade;
String address;
public void showStudentInfo() { //메서드 추가
System.out.println(studentName + "," + address); //이름, 주소 출력
}
}
- Student 클래스 안에 showStudentInfo( ) 메서드를 추가했다.
- 이 메서드는 학생 이름과 주소를 출력하는 기능이다.
패키지란
패키지는 간단히 말해서 클래스 파일의 묶음이다.
패키지를 만들면 프로젝트 하위에 물리적으로 디렉터리가 생성된다.
패키지는 계층 구조를 가질 수 있는데, 패키지의 계층 구조를 구성하는 것은 전체 프로젝트의 소스 코드를 어떻게 관리할지 구성하는 것이다
패키지가 단순 클래스 묶음이 아닌 프로젝트 전체 소스 코드를 구성하는 계층구조가 되고, 이 계층 구조를 잘 구성해야 소스 코드 관리와 유지 보수가 편리하다.
자바 소스코드에서 클래스의 패키지 선언은 코드 맨 윗부분에서 한다.
'Back-End > Java' 카테고리의 다른 글
[Java] 클래스와 인스턴스 (0) | 2023.01.31 |
---|---|
[Java] 메서드(Method) (0) | 2023.01.31 |
[Java] 반복문 (0) | 2023.01.29 |
[Java] 조건문 (0) | 2023.01.29 |
[Java] 비트 연산자 (2) | 2023.01.28 |