개발자 과정을 배우면서 주변에서 하도 객체지향 어쩌고 말을 들어서
뭐가 됐든 간에 이 녀석이 아주 중요한 놈이라는 거는 알고 있었다.
객체(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 |