Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

클래스와 객체 본문

Java

클래스와 객체

빌드이너프 2023. 1. 31. 11:37
자바 프로그램은 클래스들의 모음
클래스를 이용하기 위해 클래스로부터 객체를 생성해야함
한 클래스로부터 여러 개의 객체들을 생성할 수 있고 객체들을 구별하기 위해 객체를 가리키는 참조 변수 사용함
참조 변수를 통해 필요한 메소드 호출함

절차 지향 프로그래밍(procedure-oriented programming)

  • 초기의 컴퓨터 프로그램은 수학/공학 계산이나 자료/통계 처리를 위해 작성됨
  • 주어진 문제를 컴퓨터를 이용하여 해결하는 프로그램을 작성하기 위해서 계산 과정이나 처리 절차가 매우 중요했음
  • 따라서 프로그래밍은 문제를 해결하기 위한 단계적인 절차인 알고리즘을 개발하고 필요한 데이터를 자료 구조로 표현하는 단계로 이루어짐
  • 이와 같은 방식의 프로그래밍을 절차 지향 프로그래밍이라고 부름
  • 컴퓨터가 더 많은 분야에서 활용됨에 따라 복잡한 실제 세상에서 일어나는 문제를 해결하기 위해서 절차 지향 프로그래밍을 부족하게 됨

객체지향 프로그래밍(Object-oriented programming)

  • 컴퓨터 프로그램은 실제 세상과 매우 유사하게 작성하여 실제 세상의 객체들뿐만이 아니라 객체들간의 관계나 상호작용 등으로 표현됨
  • -> 실제 세계의 문제를 보다 쉽게 프로그래밍 할 수 있음
  • 객체: 우리가 생각할 수 있는 유형의 사람/사물이거나 무형의 사물
  • 객체지향 프로그래밍은 상호작용하는 객체들로 구성
  • 객체는 관련 데이터와 이러한 데이터에 적용할 수 있는 연산들로 구성됨
  • ex. 자동차 판매점의 고객 관리 프로그램: 고객, 자동차와 많은 다른 유형의 객체들을 가질 수 있음
  • ex. 대학생들의 성적을 관리하는 프로그램: 대학생, 교과목, 성적표를 나태는 객체들을 표현해야 함
  • 데이터 값들에 적용 가능한 연산들로 구성될 수 있음 
    • 대학생 객체는 이름, 학번, 소속학과, 전화번호, 현주소 등과 같은 데이터 가짐
  • 연산은 객체가 할 수 있는 일 또는 행동을 나타냄
    • 대학생 객체에 적용 가능한 연산: 이름을 알려줌, 소속학과 변경

클래스와 객체

  • 객체들을 만들기 위해서 우리는 먼저 클래스를 정의함
  • 클래스는 객체를 정의하기 위한 틀(mold), 원형(template), 설계도(blueprint)
  • 객체는 한 클래스의 한 실례(instance)
    • 한 객체는 정확하게 한 클래스의 실례
    • -> 한 객체는 대응하는 클래스에 속함
  • ex. 집을 설계할때 건축 설계사가 만드는 설계도
  • 설계도: 방, 창, 문 등과 같은 집의 중요한 속성(attribute)들을 나타냄
  • 한 클래스가 정의되면 프로그램이 요구하는 만큼 그 클래스의 객체들을 만들 수 있음
    • = 어떤 집의 설계도로부터 여러 채의 집을 지을 수 있음
  • 만든 집들은 다른 장소에 만들어졌기 떄문에 다른 주소를 가지지만,
  • 그 집들은 방의 크기, 모양, 배치와 다른 중요한 속성들이 같으므로 같은 유형의 집이라고 볼 수 있음
  • 완전히 다른 모양의 집을 짓기 위해서는 다른 설계도가 필요함

객체 생성

  • 실 세계의 한 대상을 모델한 클래스를 이용하려면 객체를 생성해야함
  • 필요에 따라 한 클래스로부터 여러 개의 객체들을 생성할 수 있음
  • 이 객체들을 구별하기 위해 참조형 변수를 사용함
  • 참조형 변수는 가리키는 개체의 참조(reference)를 저장함
  • 참조는 가리키는 객체의 주소
  • ex. 집의 설계도에 따라 여러 채의 집을 짓는 경우
  • 집을 서울, 대구, 광주에 짓는다면 이 집들을 구별하기 위해 이름을 사용할 수 있음
  • 이때 참조변수: 서울 집, 대구 집, 광주 집
  • 한 객체가 제공하는 서비스를 이용하기 위해 그 객체를 가리키는 참조변수를 통해 해당 메소드를 호출함
  • -> 객체 지향 프로그래밍의 핵심 개념

 

클래스로 부터 객체를 생성하는 과정

  • 자바에서 참조형 변수는 가리키는 객체의 참조 값(주소)를 저장함
  • 기본형 변수와 같이 참조형 변수도 사용하기 전에 선언해야 함
  • 한 객체를 정의하는 클래스가 그 객체의 데이터 형이 됨
  • 참조형 변수들의 선언문은 기본형 변수들의 선언문과 비슷한 구조를 가짐
String name;
  • 해당 선언문은 한 String 객체를 가리키는 주소를 저장하는 String 형 변수를 만듬
  • 따라서 참조 변수는 객체 자체를 저장하지 않고 객체의 주소를 저장함
  • 변수 name은 처음에 어떤 데이터도 저장하지 않음
  • 변수는 초기화되지 않아 null 값을 가짐(null: 자바의 예약어)
  • 한 참조형 변수가 null 값을 가지는 것은 그 변수가 어떤 객체도 가리키지 않는다는 것을 말함

 

  • 모든 변수는 사용하기 전에 초기화 여부를 확인하는 것이 중요함
  • 참조형 변수의 경우: 사용하기 전에 유효한 객체를 가리키고 있는지 확인해야 함
  • 위에서 String 형 참조 변수인 name을 선언했지만 실제로 어떤 String 객체도 존재하지 않고 어떤 String 객체도 가리키지 않음
  • 객체를 생성하는 것을 실례 만들기(instantiation)라고 부름

 

name = new String("홍길동");
  • new 연산자가 객체를 생성한 후 생성자 메소드가 그 객체의 변수(들) 값을 초기화하기 위해 호출함
  • 생성자 메소드: 클래스와 같은 이름을 가지는 특별한 메소드
  • 배정문이 실행된 후: 변수 name은 "홍길동"이라는 문자열 객체를 가리킴
  • 참조형 변수는 객체의 주소를 저장하기 때문에 객체가 저장되어 있는 메모리 위치에 대한 포인터로 여겨질 수 있음

'Java' 카테고리의 다른 글

Random 클래스  (0) 2023.01.31
문자열  (0) 2023.01.31
System.in / 구분문자(delimiter)  (0) 2023.01.30
데이터 변환  (0) 2023.01.25
연산자  (0) 2023.01.25