[JAVA] 객체지향개념(객체의 정의 및 클래스)

Dawon Ruby Choi·2023년 8월 23일
0

Java

목록 보기
3/18
클래스의 정의 : 객체를 정의
클래스의 용도 : 객체를 생성하는데 사용

객체의 정의 : 실존하는것
객체의 용도 : 객체가 갖고있는 기능과 속성에 따라 다름

Tip
클래스 : 설계도
객체 : 제품

객체 = 속성(변수)+기능(메서드)
ex) TV (객체) = 속성 (크기,길이,높이,색상,볼륨,채널) + 기능 (켜기,끄기,볼륨 높이기/낮추기)

▼TV에 대입해보기
1. 클래스가 왜 필요한가
-객체를 생성하기 위해

  1. 객체가 왜 필요한가
    -객체를 사용하기 위해

  2. 객체를 사용하는 의미
    -객체가 가진 속성과 기능 사용

객체 : 모든 인스턴스를 대표하는 일반적 용어
인스턴스 : 특정 클래스로부터 생성된 객체 ex Tv인스턴스

객체는 인스턴스라고 쉽게 생각하기

클래스 작성 방법

올바른 예)
하나의 소스파일에 여러클래스 작성
-public class가 있는 경우 소스파일의 이름은 반드시 public class의 이름과 일치해야함
(메인 메서드가 있는 클래스와 일치해야함)

-public class 가 없는 경우 소스파일의 이름은 어느 클래스 이름과 동일해도 ok

-하나의 소스파일에는 하나의 클래스만 작성하는게 바람직

-대소문자는 구분되기 때문에 주의할 것

※class가 2개 이상인 경우 main 메서드가 있는 소스파일 이름으로 해야 이클립스가 자동으로 실행!!

잘못된 예)

객체의 생성과 사용

1. 객체의 생성

1) 참조변수 먼저 선언
Tv t; // Tv 클래스 타입의 참조변수 t 선언 (리모콘)

2) 객체 연결
t = new Tv(); //대입연산자로 객체와 리모콘을 연결해주는 행위,
tv 인스턴스를 생성 후, 생성된 tv 인스턴스의 주소를 t에 저장

ex) Tv t = new Tv();

2. 객체의 사용

1) t.chaneel = 7; 변수에 7 저장 (변수 사용법)
2) t. channelDown(); 메서드 호출 (메서드 사용법)
3) System.out.println("현재 채널은 " + t.channel + " 입니다.");

객체의 생성과 사용 예제

Tv t1 = new Tv();
Tv t2 = new Tv();
t1.channel = 7;
System.out.println("t1의 channel 값은" + t1.channel + "입니다."); // t1의 channel 값은 7입니다.
System.out.println("t1의 channel 값은" + t1.channel + "입니다."); // t1의 channel 값은 7입니다.

※하나의 인스턴스를 여러개의 참조변수가 가르키는 경우 가능
그러나 여러 인스턴스를 하나의 참조변수가 가르키는 것은 불가능 (변수는 하나의 값만 저장하기 때문)

  1. 클래스 작성 2. 객체 생성 3. 객체 사용

객체 배열

TV tv1, tv2, tv3; > Tv[] tvArr = new Tv[3];
// 길이가 3인 Tv타입의 참조변수 배열

객체 배열 만들 때

1) Tv타입 참조변수 3개 생성
Tv[] tvArr = new Tv[3]; (초기값은 Tv타입이 참조형이므로 null)

2) 각각의 참조변수에 tv객체 생성
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
(객체 각각의 주소가 참조변수에 저장된다)

→ 위와 같은 과정을 간단히
Tv[] tvArr = { new Tv(), new Tv(), new Tv() };

⭐️객체배열만 생성해놓고 객체는 생성 안하는 경우가 많은데 주의하기! 객체배열 생성 후 각 참조변수에 객체 생성하기!!

클래스

클래스의 정의

  • ①설계도 ②데이터+함수 ③사용자 정의 타입

클래스 = 데이터+함수
-변수(하나의 데이터)→배열(같은종류만 저장)→구조체(서로 관련된 여러종류의 데이터)→클래스(구조체+함수)

사용자 정의 타입
-원하는 타입을 직접 만들 수 있음
-서로 관련된 데이터를 하나로 묶어서 객체지향적인 코드로 만들 수 있음


▲ 비객체지향 코드

▲ 객체지향 코드

이렇듯 유지보수가 쉽고, 코드가 간편해진다는 장점이 있음

선언위치에 따른 변수의 종류

영역
①클래스영역 - 선언문만 가능
②메서드영역 - 메서드선언

변수 종류
①iv(인스턴스변수)
선언위치 : 클래스 영역
생성시기 : ★인스턴스가 생성될 때
객체 == iv묶음
객체생성을 해야 사용가능

②cv(클래스변수) - static+iv
선언위치 : 클래스 영역
생성시기 : 클래스가 메모리에 올라갈 때
객체생성이 필요없다
아무때나 사용가능

③lv(지역변수)
선언위치 : 메서드 영역
생성시기 : 메서드 영역 내 변수 선언문이 수행 됐을 때
메서드 끝나면 자동 제거됨

객체 == iv(인스턴스 변수)들을 묶어놓은 것 이라고 쉽게 생각하기~

선언위치에 따른 변수의 종류

클래스변수와 인스턴스변수

인스턴스변수 (개별 속성)

  • 객체마다 다르게 유지되어야 하는 값(개별)
  • 객체마다 따로 공간이 있음

클래스변수 (공통 속성)

  • 모든 객체가 공통으로 가져야 하는 값(공통)
  • static을 붙임
  • cv는 다른 공간에 항상 한개만 만들어짐
  • 객체생성 없이 사용가능
  • 자동으로 만들어짐
  • 모든 객체가 공유!

Ex. 카드객체
① 객체 생성
Card c = new Card();
② iv객체 사용
c.kind = “HEART”;
c.number = 5;
③ .cv객체 사용
Card.width = 200;
Card.height = 300;

🌟주의할 점! cv(static변수) 사용 할 시 참조변수.변수명(c.height)이 아니라 클래스이름.변수명(Card.height)으로 사용해야함

profile
나의 코딩 다이어리🖥️👾✨

0개의 댓글