객체 지향 프로그래밍과 클래스
객체와 객체 지향 프로그래밍
- 국어사전에서 객체의 뜻을 찾아보면 '의사나 행위가 미치는 대상'이라고 설명합니다.
- 우리 주위에 있는 객체를 생각해 보면 사람, 자동차, 건물 등이 있습니다. 즉, 눈에 보이는 사물은 모두 객체라고 할 수 있습니다.
- 눈에 안보이는 것도 객체가 될 수 있습니다. 주문, 생산, 관리등 어떤 행동을 나타내는 단어도 객체가 될 수 있습니다.
- 자바 객체 지향 프로그래밍(Object-Oriented Programming: OOP)은 객체를 기반으로 하는 프로그램입니다.
- 객체지향 프로그램이란 '어떤 대상(객체)'을 가지고 프로그래밍한다는 것
객체 지향 프로그래밍과 클래스
객체와 객체 지향 프로그래밍
- 국어사전에서 객체의 뜻을 찾아보면 '의사나 행위가 미치는 대상'이라고 설명합니다.
- 우리 주위에 있는 객체를 생각해 보면 사람, 자동차, 건물 등이 있습니다. 즉, 눈에 보이는 사물은 모두 객체라고 할 수 있습니다.
- 눈에 안보이는 것도 객체가 될 수 있습니다. 주문, 생산, 관리등 어떤 행동을 나타내는 단어도 객체가 될 수 있습니다.
- 자바 객체 지향 프로그래밍(Object-Oriented Programming: OOP)은 객체를 기반으로 하는 프로그램입니다.
- 객체지향 프로그램이란 '어떤 대상(객체)'을 가지고 프로그래밍한다는 것
- 학생 객체를 생각해 보면, 먼저 객체를 표현할 클래스의 '이름'이 필요합니다. 클래스명을 Student라고 정합니다.
- 학생 객체가 가지는 일반적인 속성은 학번, 이름, 학년, 사는 곳 등으로 생각해볼 수 있습니다.
- 이런 클래스의 속성은 특성이라고 하고 클래스 내부에 변수로 선언합니다.
- 이렇게 선언하는 클래스의 속성을 멤버변수라고 합니다
클래스를 정의하는 문법
(접근제어자) class 클래스 이름 {
멤버변수;
메서드;
}
package study02;
public class Student {
int studentID; // 학번
String studentName; // 학생이름
int grade; // 학년
String address; // 사는 곳
}
- 클래스를 만들때는 class 예약어를 사용합니다.
- 클래스 이름은 Student라고 정했습니다.
- { }안에는 클래스의 내용을 구현합니다.
- 프로그램에서 사용할 객체의 속성을 클래스의 변수로 선언합니다.
- 변수를 선언할 때는 각 변수의 속성에 맞는 자료형을 사용해야 합니다.
- 자바 프로그램은 모든 요소가 클래스 내부에 있어야 합니다.
- 클래스 외부에는 package 선언과 import문장 외에 아무것도 선언하지 않습니다.
클래스 이름을 짓는 규칙
- 클래스 이름은 대문자로 시작합니다.(파스칼 케이스 - 첫 시작 단어는 대문자로 예) OrderInfo, OrderItems)
- 소문자로 시작한다고 해서 오류가 발생하는 것은 아니나 개발자들 사이에서 관습처럼 사용되는 규칙입니다.
- 관습을 따르면 각 명칭의 용도를 쉽게 유추할 수 있습니다.
클래스의 속성을 구현하는 멤버변수
- 클래스에 선언하여 객체 속성을 나타내는 변수가 멤버 변수(member variable)입니다.
public class Student {
int studentID; // 학번
String studentName; // 학생이름
int grade; // 학년
String address; // 사는 곳
}
- 멤버변수 : int studentID, String studentName, int grade, String address
- 클래스에 선언하는 멤버변수는 다른말로 속성(property), 특성(attribute) 등으로 표현하기도 합니다.
- 멤버변수는 속성이 무엇이냐에 따라 알맞는 자료형을 선언해 주어야 합니다.
클래스와 인스턴스
- 클래스에서는 학생 객체가 가지고 있는 속성르 사용해 학생과 관련된 기능을 구현할 수 있습니다.
(예 : '학생에게 이름을 부여한다.', '학생이 사는 곳을 출력한다.') - 클래스 내부에서 멤버 변수를 사용하여 클래스의 기능을 구현한 것을 '멤버 함수(member function)' 또는 '메서드(method)'라고 합니다.
(메서드로 용어를 통일하여 진행)
학생 이름과 주소를 출력하는 메서드 만들기
package study02;
public class Student {
int studentID; // 학번
String studentName; // 학생이름
int grade; // 학년
String address; // 사는 곳
public void showStudentInfo() {
System.out.println(studentName + "," + address); // 이름, 주소 출력
}
}
패키지란?
- 클래스파일의 묶음
- 패키지를 만들면 프로젝트 하위에 물리적으로 디렉토리가 생성됩니다.
- 패키지는 계층구조를 가지고 있습니다.
- 패키지가 단순히 클래스 묶음이 아닌 프로젝트 전체 소스 코드를 구성하는 계층구조가 되고, 이 계층구조를 잘 구성해야 소스 코드 관리와 유지보수가 편리합니다.
패키지 선언하기
- 자바 소스 코드에서 클래스의 패키지 선언은 다음처음 맨 위에서 합니다.
package domain.student.view
public class StudentView {
...
}
- 클래스 이름은 StudentView이지만, 클래스의 전체 이름(class full name)은 domain.student.view.StudentView입니다.
- 클래스 이름이 같다고 해도 패키지 이름이 다르면 클래스 전체 이름이 다른 것이므로 다른 클래스가 됩니다.
- 같은 이름의 클래스라도 다른 패키지에 속해 있으면 서로 연관이 없습니다.
메서드
메서드는 함수(function)의 한 종류 입니다.
함수란?
- 하나의 기능을 수행하는 일련의 코드
- 함수는 어떤 기능을 수행하도록 미리 구현해 놓고 필요할 때마다 호출하여 사용할 수 있습니다.
함수의 입력과 반환
- 함수는 이름이 있고, 입력된 값과 결과 값을 갖습니다.
- 두 수를 더하는 함수를 예로 들면 두 수를 입력받아서 '더하기 함수'를 거치면 두 수의 합을 반환합니다.
- 함수에 이름을 붙일 때는 의미를 알 수 있는 단어를 사용하는 것이 좋습니다. 더하는 함수 이므로 add라고 이름을 짓습니다.
- 더하는 두 수는 각각 num1, num2라고 정합니다.
- num1, num2와 같이 함수의 입력을 받는 변수를 매개변수라고 합니다.
- 두 수를 더한 결과 값을 result 변수에 저장하여 돌려 줍니다. 이를 '결과를 반환한다'고 합니다.
- 이렇게 함수를 수행한 후, 결과로 되돌려 주는 값인 result를 반환값이라고 부릅니다.
함수 정의하기
함수가 하는 일을 코드로 구현하는 것을 함수를 정의 한다 라고 합니다.
함수이름
- 함수 이름은 add라고 썼습니다.
- (1) 위치가 함수 이름을 적는 부분입니다.
- 함수 이름은 변수 이름처럼 프로그래머가 임의로 만들면 되는데, 함수 기능과 관련있게 만들어야 나중에 호출하거나 이해하기 좋습니다.
매개변수
- add 함수는 두 값을 더하는 일을 합니다.
- 덧셈을 수행하기 위해서는 먼저 함수에 두 값이 입력되어야 합니다.
- 함수는 넘겨받은 값으로 덧셈을 수행합니다. 이렇게 함수 내부에서 사용할 괄호 안의 변수를 매개변수라고 합니다.
- (2) num1과 num2가 매개변수 입니다.
- 경우에 따라서는 매개변수가 필요없는 함수도 있습니다.
int getTenTotal() {
int i;
int total = 0;
for(i = 1; i <= 10; i++) {
total += i;
}
return total; // 1부터 10까지 더한 값을 반환
}
return 예약어와 반환형
- add()함수를 수행한 후 결과 값은 변수 result에 저장됩니다.
- result에 저장된 결과 값은 함수를 호출했을 때 반환되는 값이므로 반환값이라고 부릅니다.
- '**이 함수의 결과 값을 반환 합니다.**를 뜻하는 예약어가 return입니다.
- (3) return 예약어를 사용하여 result 값을 반환하는 것 입니다.
- 반환 값의 자료형을 반환형이라고 하는데 (4) 위치에 써 줍니다.
- 이 함수에서 변수 result의 반환형은 정수형이므로 (4)위치에 int라고 적습니다.
- 경우레 따라서는 반환값이 없는 함수도 있습니다.
- 반환값이 없다고 해서 반환형을 쓰는 (4)위치를 비워두면 오류가 발생합니다. 이 때에는 (4)위치에 void라고 씁니다.
- void는 비어있다는 의미로 '반환할 값이 없다'는 뜻의 예약어입니다.
void printGreeting(String name) {
System.out.println(name + "님 안녕하세요");
return; // 반환값 없음 (생략 가능)
}
- return 예약어는 함수 수향을 끝내고 프로그램 흐름 중에서 호출한 곳으로 다시 되돌아갈 때도 사용할 수 있습니다.
void divide(int num1, int num2) {
if (num2 == 0) {
System.out.println("나누는 수는 0이 될 수 없습니다.");
return; // 함수 수행 종료
} else {
int result = num1 / num2;
System.out.println(num1 + "/" + num2 + "=" + result + "입니다.");
}
}
- 나누는 수가 0이라면 함수 수행을 하면 안되므로 함수 수향을 종료하는 예약어 return을 사용합니다.
- 함수 수행을 종료하는 목적이므로 return 뒤에 반환값을 적지 않아도 됩니다.
함수 호출하고 값 반환하기
package study02;
public class Git_Java28 {
public static void main(String[] args) {
int num1 = 10;
int num2 = 20;
int sum = add(num1, num2); // add() 함수 호출
System.out.println(num1 + " + " + num2 + " = " + sum + "입니다.");
}
// add() 함수
public static int add(int n1, int n2) {
int result = n1 + n2;
return result; // 결과 값 반환
}
}
'Java' 카테고리의 다른 글
this(Java) (0) | 2022.07.12 |
---|---|
Java 복습_10 (0) | 2022.07.10 |
Java 복습_08 (0) | 2022.07.04 |
Java 복습_7 (0) | 2022.06.29 |
Java 복습_6 (0) | 2022.06.18 |
댓글