9강. 클래스와 객체1(1)

철새·2022년 2월 9일
0
  • Do it! 자바 프로그래밍 입문 온라인 강의를 수강하며 작성하였습니다.
  • Section 1. 자바의 핵심 - 객체지향 프로그래밍
  • 9강 "클래스와 객체1(1)"
  • 객체지향 프로그래밍과 클래스 > 클래스(class) > 패키지(package)

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

  • 객체(Object)란?
    "의사나 행위가 미치는 대상" - 사전적 의미
    구체적, 추상적 데이터 단위
  • 객체지향 프로그래밍(Object Oriented Programming, OOP)
    객체를 기반으로 하는 프로그래밍
    cf. 절차 프로그래밍(Procedural Programming) 예) C언어
  • 객체를 정의하고, 객체의 기능을 구현하고, 객체 사이의 협력을 구현한다.

클래스(class)

  • 객체에 대한 속성과 기능을 코드로 구현한 것으로, "클래스를 정의한다."라고 표현한다.
  • 객체의 속성은 property(특성), attribute(속성), memver variable(멤버 변수)라고 표현한다.
  • 객체의 기능은 method(메서드), member function(멤버 함수)라고 표현한다.

클래스 정의하기

  • 접근 제어자는 추후에 배울 내용이지만 작성하지 않을 수 있다.
  • 클래스명은 영어로 쓰고, 첫글자는 대문자로 작성한다.
  • 하나의 java 파일에 하나의 클래스를 두는 것이 원칙이나,
    여러 개의 클래스가 같이 있는 경우 public 클래스는 단 하나이며,
    public 클래스와 자바 파일의 이름은 동일해야 한다.
  • 자바의 모든 코드는 class 내부에 위치해야 한다.
(접근 제어자) class 클래스명 {
	멤버 변수;
    메서드;
}

클래스 정의 예시로 아래와 같은 속성을 갖는 클래스를 정의해보겠다.

속성자료형변수 이름설명
학번intstudentID학번은 정수로 나타낼 수 있기 때문에 int형으로 선언
이름StringstudentName학생 이름은 문자로 되어있고, 하나의 문자가 아닌 여러 개의
문자로 이루어진 문자열로 표현하므로 String 클래스를 사용
학년intgrade학년은 정수로 나타낼 수 있기 때문에 int형으로 선언
사는 곳Stringaddress문자열을 나타내기 위해 String 클래스를 사용
public class Student {
	// 멤버 변수를 정의
	int studentID;
	String studentName;
	int grade;
	String address;
	
	// 메서드 정의
	public void showStudentInfo() {
		System.out.println("학번 : " + studentID);
		System.out.println("이름 : " + studentName);
		System.out.println("학년 : " + grade);
		System.out.println("주소 : " + address);
	}
	
	public static void main(String[] args) {
		Student studentLee = new Student();	//클래스 생성
		//생성된 클래스의 멤버 변수를 초기화
		studentLee.studentID = 20220210;
		studentLee.studentName = "이순신";
		studentLee.grade = 2;
		studentLee.address = "서울시 서초구 서초동";
		//클래스의 메서드 호출
		studentLee.showStudentInfo();
	}
}

클래스 출력

위의 예시에서는 코드가 시작되는 main 함수를 class 안에 함께 썼지만, 아래와 같이 다른 클래스에서 Student 클래스를 생성하여 사용할 수 있다.

public class StudentTest {
	public static void main(String[] args) {
		Student studentHong = new Student();	//클래스 생성
		//생성된 클래스의 멤버 변수를 초기화
		studentHong.studentID = 20220210;
		studentHong.studentName = "홍길동";
		studentHong.grade = 2;
		studentHong.address = "서울시 서초구 서초동";
		//클래스의 메서드 호출
		studentHong.showStudentInfo();
	}
}

다른 클래스에서 생성해서 출력
이름을 홍길동으로 바꿔서 showStudentInfo 메서드를 호출했을 때 정상 출력되는 것을 확인할 수 있다.

패키지(package)

  • 소스의 묶음으로, 여러 소스들을 각각 흩어져서 두는 것이 아니라 비슷한 성격의 소스들끼리 패키지로 묶어두는 것이다.
  • 패키지의 이름은 패키지 안의 소스들의 성격을 나타내도록 지어준다.
  • 패키지를 어떻게 나누느냐에 따라 소스를 관리하는 효율성이 크게 좌우된다.
  • 패키지가 다르면 클래스명이 같아도 되는데, 클래스명은 실제로 "패키지명.클래스명"으로 정해지기 때문이다.
  • 패키지 안에 패키지가 있어도 되며, 패키지 안에 여러 개의 클래스가 있어도 된다.

패키지 예시
위 예시는 학교정보시스템 안에서 수업(course)과 학생(Student)로 패키지를 나누고, 각각 데이터베이스와 연동해주는 역할을 하는 소스는 dao(Data Access Object) 패키지에, 화면에 보여지는 소스는 view 패키지에 묶어준 것이다.

profile
효율성을 추구하며 세상을 떠도는 철새입니다.

0개의 댓글