객체 지향 프로그래밍과 클래스 그리고 패키지
객체와 객체 지향 프로그래밍:
국어 사전에서 객체의 뜻을 찾아보면 '의사나 행위가 미치는 대상'이라고 설명한다. 우리 주위에 있는 객체를 생각해보면 사람, 자동차, 건물 등이 있다.
즉 눈에 보이는 사물 = 모두 객체 라는 공식이 성립할 수 있다.
객체를 먼저 정의하고 각 객체가 어떤 기능을 제공하고 객체 간 협력을 통해 어떻게 구현할 것인지 고민해야 한다.
예시: 학생이 밥을 먹는다:
객체 : 학생 , 밥
학생이 밥을 먹는 협력으로 객체가 서로 협력을 통해 이루어진다.
클래스란?
객체 지향 프로그램은 클래스를 기반으로 프로그래밍한다.클래스는 객체의 속성과 기능을 코드로 구현한 것이다.
객체를 클래스로 구현하는 것 -> 클래스를 정의한다.
클래스를 정의하기 위한 조건:
우선 클래스 이름과 클래스가 가지는 속성 또는 특성이 필요한다.
예시: 학생 클래스 만들기:
package classpart;
Public class Student {
int studentID;
String studentName;
int grade;
String address;
}
클래스를 만들때는 class 예약어를 사용한다.
위 코드를 보면 객체의 속성을 클래스의 변수로 선언한다. 또한 자바 프로그램은 모든 요소가 클래스 내부에 존재해야 한다.
*** 클래스 외부에는 package 선언과 import 문장외에 아무것도 선언하지 않는다.
클래스 이름 짓는 규칙:
* 자바 자바에서 클래스 이름은 대문자로 시작해야한다. /**/ 소문자로 시작한다고 오류가 발생하는 것은 아니지만 개발자들관의 규칙이다(국룰)
-- 클래스 기능을 구현하는 메서드
클래스에서는 객체가 가지는 속성을 사용해 객체와 관련된 기능을 구현할 수 있다.
예시: "학생에게 이르을 부여한다", "학생이 사는 곳을 출력한다."
클래스 내부에서 멤버 변수를 사용하여 클래스 기능을 구현한 것을 멤버 함수(member function) 또는 '매ㅔ서드' 라고 한다.
예제코드:
package classpart;
public class Student {
int studentID;
String studentName;
int grade;
String address;
public void showStudentInfo () {
System.out.pirntln(StudentName + "," + address); // 이름 , 주소 출력
}
}
위 코드에서는 showstudentInfo() 메서드를 추가했다.
이 메서드는 학생 이름과 주소를 출력하는 기능을 담당한다.
** 패키지란? **
패키지는 간단히 말하면 클래스 파일의 묶으이다.
패키지를 만들면 프로젝트 하위에 물리적으로 디렉토리가 생성되며 패키지는 계층 구조를 가질 수 있다.
프로젝트를 수행할때 패키지의 계층 구조를 구성하는 것은 전체 프로젝트의 소스코드를 어떻게 관리할지와 관련이 있다.
예시: 학교와 관련된 프로젝트를 수행한다 가정:
** 이 프로젝트에서 학생,과목,교실,담당 교수, 학과 등의 클래스로 만들 수 있다.
그리고 그러한 클래스와 협력을 하는 여러 다른 클래스가 존재할 수 있다.
패키지 젙보: 가령 학생이 신청한 과목에 대한 정보를 담고 있는 클래스나 모든 정보를 관리하는 데이터베이스에서 학생 정보를 가져오는 클래스, 또는 학생의 학점이나 학교 정보를 등록하거나 관리할 수 있는 화면을 구성하는 부분 등의 코드가 있을 것이다. 패키지의 계층 구조를 만드는 작업은 이러한 소스코드를 어떠한 계층 구조로 관리할지 구성하는 것이다.
Student와 Course 등 기본이 되는 클래스를 기반으로 그 하위의 협력 클래스를 패키지로 구분하여 구성한 모습을 띈다.
참조!! ** 해키지가 단순히 클래스 묶음이 아니라 프로젝트 전체 소스 코드를 구성하는 계층 구조가 되고 이 계층 구조를 잘 구성해야 소스코드 관리와 유지 보수가 편리하다.
*패키지 선언하기
예제코드.
package domain.student.view;
puvlic class StudentView {
}
클래스 이름: StudentView
클래스의 전체이름: domain.student.view.StudentView
// 클래스 이름이 같다고 해도 패키지 이름이 다르면 클래스 전체 이름이 다른 것으로 다른 클래스로 바뀐다.
즉 같은 이름의 클래스라도 다른 패키지에 속해있으면 서로 연관이 없다.