객체란?
객체는 관련된 데이터와 함수(일반적으로 여러 데이터와 함수로 이루어지는데,
객체 안에 있을 때는 보통 프로퍼티와 메소드라고 부른다)의 집합
개발자가 다루는 데이터의 대부분은 객체(Object)이다. 온라인 서점을 구축할 때에의 데이터는 책이고,
영화예매 예약 시스템을 구축 할 때에는 데이터는 영화가 된다.
이러한 책과 영화 같은 데이터를 변수에 저장하기 위해서는 새로운 자료형이 필요!
이러한 새로운 자료형(사용자 정의 자료형)이 왜 필요하고 어떻게 만들어 사용하는 지를 이해하는 것이 중요하다.
새로운 자료형이 필요한 이유?
객체 데이터는 하나의 구조(하나의 변수)로 이루어진 데이터가 아니라
여러 개의 구조(여러개의 변수)로 이루어진 데이터이다.
객체 데이터를 변수에 저장하기 위해서는 새로운 자료형이 필요하기 때문에
개발자가 직접 자료형을 만들어서 사용하는 것이 “객체지향 프로그래밍”이다.
객체 지향 프로그래밍 : OOP(Object Oriented Programming
데이터 변수를 한 곳에 묶어서 담아서 이동하는 것이 훨씬 편리하기 때문에,
데이터를 구분해서 여러개로 만들어서 하나의 객체로 만들게 되면 데이터처리가 불편하다.
개별로 표현된 데이터들을 하나의 구조로 묶어서 이동하게되면 효율성이 올라가고
클래스 및 패키지에서도 재사용이 가능해진다. (1개의 형태로 이동이 가능)
여러 가지인 기억공간을 묶어서 하나로 만든것을 “구조” 라고 한다.
현실세계에서는 구조가 다양한 의미로 쓰이지만,
프로그래밍에서는 기억공간을 여러개로 이어서 만든 하나의 구조를 말한다.
각각의 기억공간에 들어가는 데이터들은 전부 이질적(다름)이다. 하나의 자료형 데이터만 들어가는 것이
아닌 int, String, float 등 서로 다른 구성요소로 이루어지는 것이 진정한 객체가 될 수 있다.
★ 구조로 이루어진 것들이 “객체” (Object)라고 할수 있다.
UDDT (사용자 정의 자료형) : 객체 자료형 이라고 말하며 사용자가 직접 정의 하는 것이다.
컴파일러에 내제된 기본 자료형만으로 내가 원하는 결과를 내기 힘들기 때문에 객체 자료형이라는 class를 통해 객체지향적인 콘텐츠를 구현한다.
타입이 다 다를수 있으며 오직 하나의 데이터타입으로 통일된 배열의 개념과는 다르다.
class라는 도구를 이용해서 새로운 자료형을 내가 원하는 내용으로 설계할 수 있다.
모델링이란 ?
일반적으로, 모두에게 공통적으로 이해되도록 약속된 방식(수식,그림 등)으로 표현하는 것
- 복잡한 현실세계를 단순화(추상화) 즉, 추상적 체계적으로 표현하는 작업 또는 방법
- 관련자들끼리 상호이해를 쉽게 하도록 다이어그램화 함 현실세계에 있는 객체 책(Object) 많은 상태정보가 존재할 수 있겠지만 객체지향 프로그래밍에서 클래스로 만들어야 하기 때문에 불필요한 속성들을 제외하고 필요한 속성들로만 만드는 것을 모델링이라고 한다.
각각의 인스턴스들이 모여서 book으로 담겨서 하나의 새로은 객체 자료형이 될 수 있다.
//Q. 한 권의 책 데이터를 저장하고 출력해보자 (6개의 변수로)
String title = "JAVA";
int price = 30000;
String company = "민음사";
String author = "권민지";
int page = 700;
String isbn = "11100995";
System.out.println(title + "\t" + price + "\t" + company +
"\t" + author + "\t" + page + "\t" + isbn);
//출력 -> JAVA 30000 민음사 권민지 700 11100995
위와 같이 book이라는 자료형을 하나 만들기 위해서 6개의 변수를 선언했지만, 만약 다른 메서드로 이동을 시켜 출력하고자 할때, 6개의 변수를 담을 구조를 먼저 생성한다고 생각해야한다.
이 후, 각각의 변수를 해당 구조에 담는다면 6개의 데이터가 하나의 구조에 다 들어가게되고 이동을 시킬 때,
구조화 하여 이동하게 된다면 1개만 이동해도 6개의 데이터가 함께 이동하게 되어 효율성이 올라간다.
이러한 구조를 만드는 것을 class를 설계한다고 생각하면된다.
class : 새로운 자료형을 설계하는 도구 (Modeling) 기존 main 메서드에 작성한 것이 아닌 별도의 Book.java 파일을 생성하여 class를 따로 만들어준 후 해당 클래스를 main 메서드로 이동할 수 있도록 하는 것이다.
책이라는 자료형을 만든 후 해당 자료형을 변수에 담는방법이다.
먼저 선언된 변수에 바로 객체를 넣는다면 b라는 변수의 기억공간에는 1개의 데이터밖에 넣을 수 없기때문에 여러개의 데이터로 이루어진 “책”이라는 객체 데이터는 바로 변수에 담을 수가 없다. 여기서의 b라는 변수는 기본 변수에서 사용하는 변수가 아니고 b에는 객체가 저장되어 있기 때문에 객체변수라고 부른다. (아무것도 가르키고 있지 않음)
- 객체를 생성한다는 것은 선언이 된 Book b; 가 b라는 변수엔 Book의 객체가 담아진 게 아니라 해당 객체의 데이터들이 담긴 구조가 메모리로 만들어지며 메모리 = 번지 수 라고 생각하면 되는데, b가 담을 수 있는 자료형이 Book 이라는 말은 b의 번지수를 찾아가보니 b라는 변수가 Book이라는 메모리를 가리키고 있는 것을 알 수 있다. 메모리의 번지가 생성되며, 번지를 b에다가 담아 번지수를 통해 Book 객체로 접근할 수 있게 된다. 메모리가 만들어지면 실체화가 되고, 이 실체는 인스턴스(instance)라고 부른다.
- b에 담긴 번지가 Book이라는 자료형을 할당을 통해 가르켜줄 수 있게 되고 , 이 때, 변수 b는 실체 대상물을 가르키고 있기 때문에 인스턴스 변수라고 부른다.
Q. 한 권의 책을 변수에 저장하기 위한 객체를 생성 하시오 (책 한 권을 저장하기 위한 [인스턴스 변수]를 만드세요)
Book b = new Book(); → 인스턴스 변수 이 후 인스턴트 변수인 b를 이용해서 메모리 안에 저장된 데이터들로 접근이 가능해지는데, 이 때, Dot (도트연산자) = 참조연산자 “ . “ 을 이용해서 접근할 수 있다. ex ) b.title / b.price / b.company …등 .연산자를 이용해서 접근 가능
'[ BACKEND] > JAVA_객체지향' 카테고리의 다른 글
[JAVA] 클래스(모델)의 종류 (1) | 2023.06.12 |
---|---|
[JAVA] 클래스로 객체 모델링 (0) | 2023.06.11 |
[JAVA] 메서드 오버로딩 / 정적 바인딩 (1) | 2023.06.10 |
[JAVA] 메서드와 변수 (1) | 2023.06.09 |
[JAVA] 객체 지향(중심) 프로그래밍 (0) | 2023.06.01 |