본문 바로가기
Java

Java 복습_09

by 지민재 2022. 7. 6.
반응형
SMALL

객체 지향 프로그래밍과 클래스

객체와 객체 지향 프로그래밍

  • 국어사전에서 객체의 뜻을 찾아보면 '의사나 행위가 미치는 대상'이라고 설명합니다.
  • 우리 주위에 있는 객체를 생각해 보면 사람, 자동차, 건물 등이 있습니다. 즉, 눈에 보이는 사물은 모두 객체라고 할 수 있습니다.
  • 눈에 안보이는 것도 객체가 될 수 있습니다. 주문, 생산, 관리등 어떤 행동을 나타내는 단어도 객체가 될 수 있습니다.
  • 자바 객체 지향 프로그래밍(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

댓글