클래스와 객체_java사전교육 9~12

두윤기·2022년 12월 19일

9. 클래스와 객체 1

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

Object(객체)

  • '의사나 행위가 미치는 대상'
  • 구체적, 추상적 데이터 단위

Object Oriented Programming, OOP(객체지향 프로그래밍)

  • 객체를 기반으로 하는 프로그래밍
  • 객체간의 협력(cooperation)
  • cf. 절차 프로그래밍 (Procedural Programming)

> 생활 속의 객체 예

  • 학교 가는 과정에 대한 절차적 프로그래밍
    • 일어난다 -> 씻는다 -> 밥을 먹는다 -> 버스를 탄다 -> 요금을 지불한다 -> 학교에 도착한다.
    • 시간의 흐름에 따른 프로그래밍
  • 학교 가는 과정에 대한 객체 지향 프로그래밍
    • 객체를 정의
    • 객체의 기능구현
    • 객체 사이의 협력 구현

> Class(클래스)

class

  • 객체에 대한 속성과 기능을 코드로 구현한 것
  • '클래스를 정의한다'라고 함
  • 객체에 대한 청사진(blueprint)
  • 객체의 속성
    • property(특성), attribute(속성), member variable(멤버 변수)
  • 객체의 기능
    • 객체가 하는 기능들을 method로 구현
    • method, member function

> Class 정의하기

  • class는 대부분 대문자로 시작
  • 하나의 java 파일에 하나의 클래스를 두는 것이 원칙이나, 여러 개의 클래스가 같이 있는 경우 public class는 단 하나이며, public class와 java file의 이름이 동일해야 함
  • java의 모든 code는 class 내부에 위치
(접근 제어자) class 클래스이름 {
	멤버변수;
    메서드;
}

ex) student class

  • property: 학번, 이름, 학년, 사는 곳 등등
  • method: 수강신청, 수업듣기, 시험보기 등등

> package

  • 코드들을 관리하기 위해, 클래스들을 계층적으로 구조화한 묶음
  • 패키지 안에 있는 class의 이름은 엄연히 따지면 package.classname
  • 패키지는 directory로 구조화됨

10. 클래스와 객체 2

> method(메서드)

  • 함수의 일종
  • 객체의 기능을 제공하기 위해 클래스 내부에 구현되는 함수
(접근 제어자) 반환자료형 methodName (parameter) {
	return ;
}

함수

  • 하나의 기능을 수행하는 일련의 코드
  • 중복되는 기능은 함수로 구현하여 함수 호출하여 사용 (효율적인 코드구현, 유지보수 용이)

> 함수 정의

  • 함수를 코드로 구현
  • 함수의 이름, 매개변수, 반환 값을 선언하고 코드를 구현함

> 함수와 스택 메모리

  • 함수가 호출될 때 사용하는 메모리 - 스택(stack)
  • 함수의 기능 수행이 끝나면 자동으로 반환되는 메모리
  • 함수 호출과 스택 메모리 구조


11. 클래스와 객체 3

> class & instance

class(static code) --생성(인스턴스화)--> instance(dynamic memory, heap)

> class 생성하기

  • 클래스를 사용하기 위해서는 클래스를 생성하여야 함
  • new 예약어를 이용하여 클래스 생성
  • 클래스형 변수이름(참조변수, reference variable) = new 생성자;
    ex) Student studentA = new Student();

> instance와 heap 메모리

  • 하나의 클래스 코드로부터 여러 개의 instance를 생성
  • instance는 heap memory에 생성됨(property만 생성, method는 다른 공간에 생성)
  • 각각의 instance는 다른 메모리에 다른 값을 가짐
  • stack의 reference variable은 지역변수로 블럭이 끝날 때 자동으로 없어짐
  • heap memory는 c++에서는 사용자가 비워줘야 했지만, java에서는 garbage collector가 정리해준다.

> class, instance, reference variable, 참조 값

> constructor(생성자)

  • instance 생성 시 초기화 할 때의 명령어 집합
  • constructor에 초기화되지 않은 멤버 변수들의 default 초기화값
    • int(정수형 data type): 0
    • double(실수형 data type): 0.0
    • char(문자형 data type: 0
    • boolean: false
    • refence varialbe: null
  • 생성자의 이름은 그 클래스의 이름과 같음
  • 생성자는 method가 아님, 상속되지 않으며, return 값 없음
  • 생성자 기본 문법
<access modifiers> <class_name>([<argment_list>]) {
	[<statement>]
}

ex) Student studentDoo = new Student();

default constructor

  • 하나의 class 안에 반드시 적어도 하나 이상의 constructor가 존재, programmer가 constructor를 기술하지 않으면 compiler가 default constructor 추가해줌
    ex) 클래스 안 public Student() {}
  • 매개변수 X, 구현부 X

constructor overload

입력값을 받는 생성자가 있어도 default constructor를 사용할 경우 class 내부에 default constructor를 명시해줘야함

12. 클래스와 객체 4

> reference data type(참조 자료형)

변수의 자료형

  • primitive data type: int, long, float, double, ...
  • reference data type: String, Date, Student, ...
    클래스 형으로 선언하는 자료형
    + jdk에서 제공하는 자료형 중 생성자(new ())를 선언하지 않아도 사용할 수 있는 자료형이 있다. ex)String

> 참조 자료형의 예

  • 학생의 속성 중 수업에 대한 부분, 수업에 대한 각 속성을 학생 클래스에 정의하지 않고 수업이라는 class로 분리해서 사용
  • 이 때, 과목은 참조 자료형으로 선언

? 궁금한 점 ?

public class Point {
	int x;
    int y;
}

public class Circle {
	Point point;
    int radius;
    
    public Circle() {
    	point = new Point();
    }
}

// Circle class에서 constructor에 생성자를 쓰는게 아니라
Point point = new Point(); 멤버변수 point 선언에 생성자를 포함하고,
constructor를 안건드려도 되는거 아닐까?

+ eclipse에서 getter와 setter는 우클릭/source에 클릭으로 구현할 수 있게 되어있다.

> information hiding(정보 은닉, access modifier)

private

  • 외부 class에서 member variable, method에 access(접근)하지 못함
  • member variable나 method를 외부에서 사용하지 못하도록 하여 오류 줄임 (데이터의 신뢰성 검토 필요)
  • member variable 값이 필요한 경우 get(), set() method를 제공

public

  • 외부 class에서 member variable, method에 access(접근) 가능

(default)

  • 같은 package 안에서는 access 가능

protected

  • 상속 관계에서만 public, 그 외 class에서는 private
profile
programmerD

0개의 댓글