충분히 쌓여가는
클래스와 객체 본문
자바 프로그램은 클래스들의 모음
클래스를 이용하기 위해 클래스로부터 객체를 생성해야함
한 클래스로부터 여러 개의 객체들을 생성할 수 있고 객체들을 구별하기 위해 객체를 가리키는 참조 변수 사용함
참조 변수를 통해 필요한 메소드 호출함
절차 지향 프로그래밍(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 |