본문 바로가기

develop/Java

객체지향 - (1)

개발자 과정을 배우면서 주변에서 하도 객체지향 어쩌고 말을 들어서 

뭐가 됐든 간에 이 녀석이 아주 중요한 놈이라는 거는 알고 있었다. 

 

객체(object-oriented) 란 쉽게 말해서 '나'(주체)가 파악하는 모든 것이라고 할 수 있다. 

모든 것에는 객체의 물리적, 개념적 대상을 모두 포함한다. 

물리적인 사람, 자동차, 동물 추상적인 학과, 시험, 강의 등이 모두 객체가 될 수 있다!

 

 

객체는 속성(구성요소)과 동작(기능)로 구성되어 있는데

자바에서는 이 속성과 동작을 필드메소드라고 부른다!

 

 

ex.

객체 - 사람

속성 : 나이, 성별, 이름, 거주지

동작 : 걷다, 말하다, 춤추다

 

객체 - 자동차

속성 : 색깔, 브랜드명, 배기량, 속도, 바퀴, 엔진

동작 : 전진, 후진, 멈춤

 

 

이렇게 객체를 소프트웨어 상에서 설계하는 것을 객체 모델링이라고 한다.

현실세계의 객체를 소프트웨어 상으로 불러와 객체의 필드와 메소드로 정의하는 과정임

 

<객체 지향 3단계>

  현실 프로그래밍
1 분석 객체 모델링
2 설계 클래스 정의
3 구현 인스턴스 생성

 

1단계 분석에서 객체를 필드와 메서드로 나뉘어서 모델링을 하고

2단계 설계에서 인스턴스를 생성할 수 있는 설계도인 클래스로 정의를 내린다

3단계에서는 클래스를 바탕으로 인스턴스를 마구 생성할 수 있음

 

클래스는 객체를 컴퓨터에서 표현하기 위한 설계도라고 할 수 있다!

 

 

 

클래스(class) 정의

 

 

-객체 분석 결과물을 토대로 설계도에 해당하는 클래스 정의

-class 키워드 뒤에 클래스의 이름을 명시하고 중괄호 사용

-클래스 내에는 객체 속성을 저장하는 멤버변수(필드)를 적고 객체의 동작을 나타낼 메서드를 정의한다. 

-아직 실체화 한 상태가 아니라 객체는 아니기에 변수에 값을 저장할 필요는 없지만,

필요에 따라 저장해서 선언은 가능함!

 

사람 person 클래스 정의 

[제한자] class명 {

//멤버변수(필드)

//메서드

}

 

속성 : 나이(int age), 성별(String gender), 이름(String name)

동작 : 말하다 talk() 

public person(){

int age;
String name;
String gender;

	public void talk(){
		System.out.println("사람이 말합니다");
	}

}

 

인스턴스 생성 기본 문법

 

클래스명 참조변수명 = new 클래스명(); (배열 문법이랑 비슷하다!)

=> new 키워드를 통해 Heap 공간에 클래스의 인스턴스가 생성되고,

 해당 인스턴스가 생성된 메모리 주소값을 참조변수에 전달해 저장된다.

 

참조변수명.멤버변수 명 or 참조변수명.메서드명() 입력하면

인스턴스의 멤버에 접근할 수 있다. 

 

 

 

위의 person 클래스의 인스턴스를 생성해보자

 

 

person pe = new person();

pe.name = "홍길동";
pe.age = 23;
pe.gender = "여성";


참조변수 pe를 사용하여 생성된 person 인스턴스에게 접근해야 함.

name = "홍길동"; 하게 되면 자신의 변수가 아니므로 접근이 안된다. 

반드시 참조변수를 통해 ( = pe.name) 인스턴스에 접근한 뒤, 변수명을 사용해야 함!

 

System.out.println("이름 : " + pe.name);
System.out.println("나이 : " + pe.age);
System.out.println("성별 : " + pe.gender);

하면

이름 : 홍길동

나이 : 23

성별 : 여성

출력된다. 

 

그리고 아까 클래스에서 정의했던 메소드도 호출가능한데 메소드도 마찬가지로 앞에 참조변수를 붙힌 형태로 호출해야한다.

참조변수.메서드명();

 

pe.talk();

 

=> "사람이 말합니다" 출력

 

 

'develop > Java' 카테고리의 다른 글

접근제한자, 메서드 오버로딩  (0) 2021.02.09
객체 지향 -(2) 생성자  (0) 2021.02.09
메소드 method - (2)  (0) 2021.02.04
메소드 method -(1)  (0) 2021.02.03
배열(Array) - 2차원 배열  (0) 2021.01.31