Don't Panic
in Java ☕ 2분 읽기

[Java] java 객체지향기초

목차

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

객체 (Object)

  • 의사나 행위가 미치는 대상 (사전적 의미)
  • 구체적이거나 추상적인 데이터의 단위 (예: 학생, 회원, 생산, 주문, 배송)

객체 지향 vs 절차 지향 프로그래밍

아침에 일어나 학교를 가는 과정을 예로 들어 봅시다.

절차 지향 프로그래밍

시간이나 사건의 흐름에 따라 프로그래밍하는 방식입니다.

일어난다 → 씻는다 → 밥을 먹는다 → 버스를 탄다 → 요금을 지불한다 → 학교에 도착

객체 지향 프로그래밍

객체 지향 프로그래밍 개념도

객체 지향 프로그램은 어떻게 구현하는가?

  1. 객체를 정의하고
  2. 각 객체가 제공하는 기능들을 구현하고
  3. 각 객체가 제공하는 기능들 간의 소통(메시지 전달)을 통해 객체 간의 협력을 구현한다.

02. 생활 속에서 객체를 찾아 클래스로 구현해 보기

객체를 찾아 봅시다

  • 온라인 쇼핑몰에 회원 로그인을 하고, 여러 판매자가 판매하는 제품 중 하나를 골라 주문을 한다.
  • 아침에 회사에 가는 길에 별다방 커피숍에 들러 아이스 카페라떼를 주문했다.
  • 성적 확인을 위해 학사 관리 시스템에 로그인하여 수강한 과목들의 성적을 확인했다.

클래스는 객체의 청사진(blueprint)입니다

객체의 속성은 클래스의 **멤버 변수(member variable)**로 선언합니다.

학생 클래스

public class Student {

	int studentNumber;
	String studentName;
	int majorCode;
	String majorName;
	int grade;
}

주문 클래스

public class Order {

	int orderId;
	String buyerId;
	String sellerId;
	int productId;
	String orderDate;
}

회원 클래스

public class UserInfo {

	String userId;
	String userPassWord;
	String userName;
	String userAddress;
	int phoneNumber;
}

객체 지향 프로그램을 할 때는

  1. 객체를 정의하고
  2. 각 객체의 속성은 멤버 변수로, 역할은 메서드로 구현하고
  3. 각 객체 간의 협력을 구현합니다.

클래스 코딩 규칙

  • 클래스 이름은 대문자로 시작하는 것이 좋다.
  • 하나의 .java 파일에 클래스는 여러 개 있을 수 있지만, public 클래스는 하나만 둘 수 있으며 public 클래스 이름과 .java 파일 이름은 같아야 한다.
  • camel notation 방식으로 명명한다.

03. 함수와 메서드

함수란? (function)

  • 하나의 기능을 수행하는 일련의 코드.
  • 구현(정의)된 함수는 호출하여 사용하며, 호출된 함수는 기능이 끝나면 제어가 반환된다.
  • 함수로 구현된 하나의 기능은 여러 곳에서 동일한 방식으로 호출되어 사용될 수 있다.

함수의 호출과 반환

함수 정의하기

함수는 이름, 매개 변수, 반환 값, 함수 몸체(body)로 구성됩니다.

int add(int num1, int num2) {

	int result;
	result = num1 + num2;
	return result;
}

함수 구현 예제

public class FunctionTest {

	public static int addNum(int num1, int num2) {
		int result;
		result = num1 + num2;
		return result;
	}

	public static void sayHello(String greeting) {
		System.out.println(greeting);
	}

	public static int calcSum() {

		int sum = 0;
		int i;

		for(i = 0; i<=100; i++) {
			sum += i;
		}

		return sum;
	}

	public static void main(String[] args) {

		int n1 = 10;
		int n2 = 20;

		int total = addNum(n1, n2);

		sayHello("안녕하세요");
		int num = calcSum();

		System.out.println(total);
		System.out.println(num);
	}
}

함수 호출과 스택 메모리

  • 스택: 함수가 호출될 때 지역 변수들이 사용하는 메모리.
  • 함수의 수행이 끝나면 자동으로 반환되는 메모리.

함수 호출과 스택 메모리

메서드 (method)

  • 객체의 기능을 구현하기 위해 클래스 내부에 구현되는 함수.
  • **멤버 함수(member function)**라고도 한다.
  • 메서드를 구현함으로써 객체의 기능이 구현된다.
  • 메서드의 이름은 그 객체를 사용하는 객체(클라이언트)에 맞게 짓는 것이 좋다.
    • 예) getStudentName()

04. 객체의 속성은 멤버 변수로, 객체의 기능은 메서드로 구현한다

학생 클래스를 정의하고 사용해 보자

학생 클래스의 속성을 멤버 변수로 선언하고 메서드를 구현합니다.


public class Student {

	public int studentID;
	public String studentName;  
	public String address;

	public void showStudentInfo() {
		System.out.println(studentName + "," + address);
	}

	public String getStudentName() {
		return studentName;
	}
}

학생 클래스를 생성하여, 생성된 객체(인스턴스)에 각각 다른 이름과 주소를 대입합니다.


public class StudentTest {

	public static void main(String[] args) {

		Student studentLee = new Student();
		studentLee.studentName = "이순신";
		studentLee.address = "서울";


		studentLee.showStudentInfo();

		Student studentKim = new Student();
		studentKim.studentName = "김유신";
		studentKim.address = "경주";

		studentKim.showStudentInfo();

		System.out.println(studentLee);
		System.out.println(studentKim);
	}

}