[Java/객체지향] 클래스와 객체

2024. 8. 14. 19:57프로그래밍 언어/Java

1) 객체지향언어의 특징

  1. 코드의 재사용성
  2. 코드 관리용이
  3. 신뢰성 높은 프로그래밍

OOP(objected-oriented programminng)란?

  1. 캡슐화
  2. 상속
  3. 추상화
  4. 다형성**

2) 클래스와 객체

  • 클래스: 제품설계도 - TV설계도
  • 객체: 제품 - TV

3) 속성과 기능

  • 속성: 멤버변수 - 색깔, 전원상태, 채널
  • 기능: 메서드 - 켜기, 끄기, 채널 변경하기, 볼륨 변경하기

4) 객체 VS 인스턴스

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

 

클래스 → 인스턴스화 → 인스턴스(객체)

(설계도)                         (제품)

 

클래스가 왜 필요? → 클래스 = 설계도. 즉, 객체인 제품을 생성하기 위해
객체가 왜 필요? → 객체 = 제품. 즉, 객체인 제품(TV)를 사용하기 위해
객체를 사용한다는 것은? → 객체=제품. 즉, 객체인 제품(TV)이 가진 속성과 기능을 사용하려고

5) 한 파일에 여러 클래스 작성

  • 하나의 소스파일에는 하나의 클래스만 작성하는 것이 바람직
  • 소스파일 이름은 public class이름과 일치
  • public class없는 경우, 소스파일의 이름은 class이름 모두 가능
  • 하나의 소스파일에는 하나의 public class만 가능
  • 대소문자 구분하니, 대소문자까지 일치해야함
  • 클래스가 여러 개인 경우, main메서드가 있는 클래스와 소스파일이름이 일치해야함

6-7) 객체의 생성과 사용

  • 클래스 작성
class Tv {
String color;
boolean power;
int channel;

void power() {power = !power;}
void channelup() {channel++;}
void channelDown() {channel--;}
}
  • 객체의 생성
Tv t; // 1. 참조변수 = 리모컨 -> 객체를 다루기 위한 리모컨
t = new Tv(); // 2. 객체 생성 -> 3. 대입연산자(=)로 리모컨과 객체 연결[주소연결]

Tv t = new Tv();
  • 객체의 사용 : 객체가 가진 변수(속성)와 메서드(기능)를 사용한다 → 어떻게 접근? 리모컨(참조변수)를 사용하여 접근
-> 리모컨인 t를 사용하여 접근
t.channel = 7; // 변수 사용 방법 
t.channelDown(); // 메서드 사용(호출)방법
System.out.println("현재 채널은 "+t.channel+" 입니다.");
  • 순서: 클래스(설계도)작성 → 객체(제품)생성 → 객체(제품)사용
리모컨 타입과 객체의 타입은 일치해야함 → 왜? Tv는 Tv리모컨으로 다루고, 에어컨은 에어컨 리모컨으로 다루어야함
객체를 사용하려면 리모컨을 꼭 사용해야함 t.channel
대입연산자(=)로 리모컨과 객체를 연결해주어야함 [주소연결]

 

  • 객체와 참조변수의 관계
    • 하나의 객체여러 개의 참조변수가 가리키는 것은 가능 (ex) t1과 t2가 주소객체의 주소‘0X100’을 동시에 가리킬 수 있음
    • 여러 객체를 하나의 참조변수가 가리키는 것은 불가능 (ex) t1이 객체의 주소인 ‘0X100’와 ‘0X200’을 동시에 가리킬 수 없음)
    • → 왜? 변수는 하나의 값만 저장 가능하기 때문에

8) 객체 배열 == 참조변수배열


9) 클래스의 정의

  1. 설계도
  2. 데이터+함수의 결합
  3. 사용자 정의 타입

(2) 데이터+ 함수의 결합

  • 데이터 저장 공간의 발전 과정
변수 : 하나의 데이터를 저장할 수 있는 공간
배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간 → [한계] 같은 종류 밖에 저장할 수 없음
구조체
  • 서로 관련된 여러 데이터(종류 관계 X)를 하나로 저장할 수 있는 공간
  • = 여러 값을 하나로 묶었는데, 배열과 달리 다른 타입도 하나로 저장할 수 있는 공간 → [한계] 서로 관계있는 변수들 끼리만
클래스 : 데이터와 함수의 결합 = 서로 관계있는 데이터 변수를 함수와 함께 묶은 것 (구조체 + 함수)

 

  • 함수
    • = 메서드
    • 어떤 하나의 작업을 하는 명령문들을 하나로 묶은 것
    • 함수는 어떤 작업이나 계산을 함 → 작업할 때 “데이터 변수”를 가지고 작업을 함 → 그러므로 데이터와 관련있는 함수를 같이 묶는 것이 편리해서 묶어놓음

(3) 사용자 정의 타입