객체(Object)
객체 : 속성과 기능을 갖춘 것 ex) 자동차
클래스 : 속성과 기능을 정의한 것 ex) 자동차의 설계도
인스턴스 : 속성과 기능을 가진 것 중 실제 하는 것 ex) 공장에서 찍어낸 자동차 하나하나
- 실세계에서 우리 주변에 있는 모든 것들이 객체임
ex) TV, 컴퓨터, 책, 건물, 의자, 사람 등등
- 이러한 객체는 속성과 동작(기능)으로 구성되어 있음
예를 든다면 사람은 이름, 나이 등의 속성이 있고, 걷다, 쓰다, 달린다 등의 기능을 가짐
또한 자동차의 경우에는 색상, 모델링 등이 속성에 해당되고, 달린다 멈춘다 등의 기능을 가짐
- 객체는 개별적으로 사용이 될 수도 있지만, 대부분 다른 객체와 관계를 맺고 있음
이러한 관계의 종류에는 집합관계, 사용관계, 상속관계가 있음
- 집합관계는 객체는 하나의 부품이고, 하나의 완성품에 해당이 됨
ex) 자동차는 엔진, 타이어, 핸들 등으로 구성되므로 이 부품들을 집합관계로 볼 수 있음
- 사용관계는 객체 간의 상호작용을 말함. 다른 객체의 메소드를 호출하여 원하는 것을 얻어내는 것을 말함
ex) 사람은 자동차를 사용하므로 사람과 자동차가 사용관계라고 볼 수 있음.
사람은 자동차를 사용할 떄 달린다, 멈춘다 등의 메소드
- 상속관계는 상위(부모) 객체를 기반으로, 하위(자식) 객체를 생성하는 관계
일반적으로 상위 객체는 종류를 의미하고, 하위객체는 구체적인 사물에 해당
ex) 독수리는 새의 종류이다. ==> 새 : 상위 독수리 : 하위
객체지향 프로그래밍(OPP: Object Oriented Programming)
만들고자 하는 완성품인 객체를 모델링하고,
집합 관계에 있는 부품 객체와 사용 관계에 있는 객체를 하나씩 설계한 후 조립하는 방식으로 프로그램을 개발하는 기법
클래스(Class)
- 현실에서 객체는 갑자기 만들어지는 것이 아니라, 설계도를 바탕으로 만들어짐
- 예를 들어 사람이 자동차를 이용하기 위해서는 우선 공장에서 설계도를 보고 만들어야 함
객체지향 프로그래밍에서도 마찬가지임
메모리에서 사용하고 있다면 우선 설계도로 해당하는 객체를 만드는 작업이 필요함
자바에서는 설계도가 바로 클래스(Class)임
- 자바는 클래스 단위로 프로그래밍을 함
- 클래스는 객체를 만들기 위한 설계도(툴, 도면)이라고 생각하면 쉬움,
- 클래스를 구성하는 것을 멤버(member)라고 함
멤버 = 속성(멤버변수) + 기능(멤버메소드)
● 속성 : 멤버변수-클래스의 특징 ==> 명사적 개념
● 기능 : 멤버메소드 - 클래스의 행위(동작) ==> 동사적 개념
- 클래스 구성 : 클래스 헤더, 멤버변수, 멤버메소드, 생성자
멤버변수는 초기값을 설정하지 않으면 JVM이 객체 생성 시점에 해당 데이터 타입(자료형)에 맞게
알아서 해당 자료형의 default값을 설정을 해 줌
==> int형 : 0, string형 : null, boolean형 : false
클래스 형식
[접근제한] class 클래스이름 {
멤버변수;
생성자();
멤버메소드();
}
클래스 이름 : 대문자로 시작(식별자)
https://jinnnkcoding.tistory.com/46?category=877423
↑ public class와 그냥 class의 차이점
클래스 예문01)
package Class;
public class Ex01_class {
//멤버변수는 초기값을 설정하지 않으면 JVM이
//객체 생성 시점에 해당 데이터 타입(자료형)에 맞게
//알아서 해당 자료형의 default값을 설정을 해 줌
int num; //멤버변수, 이 클래스 안에서 어디서든지 사용할 수 있음
//멤버변수-> 전역변수-> 기본값: 0
String str; //멤버변수-> 전역변수->기본값 : null
void display() { //멤버메소드
int su=10; //지역변수
System.out.println("멤버변수(num)>>> "+num);
System.out.println("멤버변수(str)>>> "+str);
System.out.println("변수(지역변수)>>> "+su);
}
public static void main(String[] args) {
// 클래스를 대상으로 객체를 만드는 과정이 필요함.
// 1단계 : 클래스 선언
// 형식) 클래스이름 참조변수;
// * 참조변수 : heap 메모리 공간에 객체가 만들어지는데
// 만들어지는 객체의 주소값을 가지는 놈.
// Ex01_Class ex;
// 2단계 : 클래스를 메모리(heap)에 생성
// 형식) 참조변수 = new 클래스이름(); ==> 클래스이름(X), 생성자(O)
// ex = new Ex01_Class();
//1단계 + 2단계 : 클래스 선언 및 클래스 객체 생성
Ex01_class ex=new Ex01_class();
System.out.println("ex>>> " + ex);
System.out.println();
//3단계 : 참조변수를 이용하여 객체에 접근
// 객체에 접근 시, .(도트) 연산자를 이용하여 접근
ex.display();
System.out.println();
ex.num=150;
ex.str="홍길동";
ex.display();
System.out.println();
//1단계 + 2단계 : 클래스 선언 및 클래스 객체 생성
Ex01_class ex1=new Ex01_class();
//3단계 : 참조변수를 이용하여 객체에 접근
ex1.num = 235;
ex1.str = "유관순";
ex1.display();
}
}
결과>>>
ex>>> Class.Ex01_class@15db9742
멤버변수(num)>>> 0
멤버변수(str)>>> null
변수(지역변수)>>> 10
멤버변수(num)>>> 150
멤버변수(str)>>> 홍길동
변수(지역변수)>>> 10
멤버변수(num)>>> 235
멤버변수(str)>>> 유관순
변수(지역변수)>>> 10
클래스(class)와 객체(object)
- 클래스 : 객체를 정의해 놓은 것(추상화).
- 객체 : 클래스에 의해서 만들어진 결과물(실제화).
예) 제품설계도(클래스) ==> 제품(객체)
- 인스턴스화 : 클래스를 이용하여 객체를 만들어가는 과정.
- 클래스(1) : 객체(N)
클래스를 대상으로 객체를 생성하는 과정
형식) 클래스명 참조변수 = new 클래스명(); (X)
클래스명 참조변수=new 생성자(); (O)
https://jinnnkcoding.tistory.com/44?category=877423
원래 같이 포스팅했다가 포스팅이 너무 길어져서 따로 업로드!
'Back-End > Java' 카테고리의 다른 글
[Java] 상속(inheritance) (0) | 2021.08.17 |
---|---|
[Java] instance(인스턴스), static(스태틱, 정적) 변수/메소드 (0) | 2021.08.17 |
[Java] 메소드 다중정의(method overloading) (0) | 2021.08.16 |
[Java] 메소드(method)_메소드의 구조, call by value와 call by reference의 차이 (0) | 2021.08.16 |
[Java] 다차원 배열과 가변 배열 (0) | 2021.08.16 |
댓글