6장 - 객체지향 프로그래밍 I

·2022년 12월 12일
0

자바의 정석

목록 보기
8/12
post-thumbnail

안녕하세요 스터디 늦은 박씨입니다. 감사합니다.

객체지향언어(OOP - Object Oriented Programming)

기본적인 틀은 기존 언어에 개념과 규칙을 더한 것이다.

왜함?

재사용성, 유지보수, 중복 코드 제거
캡슐화, 상속화, 추상화, 다형성을 추구해보자.

클래스와 객체

1. 클래스와 객체의 정의, 용도

  • 클래스 정의 : 객체를 정의해 놓은 것
  • 클래스의 용도 : 객체를 생성하기 위해 사용한다.

쓰앵님의 클래스는 설계도, 객체는 이 클래스를 갖고 만든 제품, 참조변수는 제품을 조작하는 리모콘이라는 비유가 아주 찰떡이다 굿

2. 객체, 인스턴스

객체는 옆집 숭이도 기억할 수 있도록 바로 위에서 말했다 클래스라는 설계도를 갖고 만든 제품!
이 과정을 있어보이게 인스턴스화라고 하며, 만들어진 객체는 인스턴스라고 한다.

엥? 그럼 객체라고 통일하죠 ㅋㅋ

의미는 같지만, 인스턴스는 어디사는 누구 설계도로 만들었음? 에 대한 답변으로 더 적절하다고 한다.
예를 들자면

'책상은 인스턴스다' < '책상은 객체다'
'책상은 책상설계도(클래스)의 객체다' < '책상은 책상설계도의 인스턴스다'

3. 객체의 구성요소 - 속성 & 기능

객체?

  • 속성 + 기능(얘들은 객체의 멤버, 구성원)
    클래스는 설계도니까 객체의 모든 속성, 기능이 정의되어 있겠다 데박~~

속성 : 멤버변수, 특성, 필드, 상태
기능 : 메서드, 함수, 행위

class Tv { // 객체 설계도
	String color; // 변수들
    boolean power;
    int channel; 
    
    void power() { //메서드들
    	power = !power;
    }
    void channelUp() {
    	++channel;
    }
    void channelDown() {
    	--channel;
    }
}

중요하니까 또 말한다
Q. 클래스가 왜 필요한가?
A. 객체를 생성하기 위해

Q. 객체는 왜 필요한가?
A. 객체를 사용하기 위해

Q. 객체를 사용한다??
A. 객체가 지닌 변수와 기능을 사용한다는 것이다.

4. 인스턴스의 생성과 사용

설계도와 제품을 왜 만드는지도 설명했다!!! 만들어보자!!!!!

Tv t; // Tv클래스 타입의 참조변수 t 선언
t = new Tv(); // Tv인스턴스 생성(new 연산자), 생성된 주소를 참조변수 t에 저장한다.

다만들엇다.
뻥이다 위에 작성한 코드와 합쳐서 다시 만들어보자

class Tv { // 객체 설계도
	String color; // 변수들
    boolean power;
    int channel; 
    
    void power() { //메서드들
    	power = !power;
    }
    void channelUp() {
    	++channel;
    }
    void channelDown() {
    	--channel;
    }
}

class TvTest{
	public static void main(String[] args) {
    	Tv t = new Tv();
        t.channel = 7;
        t.channelDown(); // 리모콘(참조변수)을 이용해 조작도 해봤다.
    }
}

나는 리얼 숭이라 이 과정을 그림으로도 생각해봐야 한다.

헥헥.. 다그렷다

인스턴스는 참조변수를 통해서만 다를 수 있으며, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다!!

객체 두개짜리 예시도 있다.. 두개까지는.. 그리기 귀찮다. 흐름을 따라가셈 그냥 느껴 같은 객체를 가리키고 있는지 아닌지 잘 생각하셈

5. 객체 배열

많은 수의 객체를 다뤄야할 때, 배열로 다루면 편리하겠다 데박!!!!
참조변수 배열이라고 생각하면 될거가틈!!

여기까지는 선언만 했다. 값을 넣어주자!!!

tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();

이렇게 쓰는게 개이득임
Tv[] tvArr = { new Tv(), new Tv(), new Tv() };

지존 많다면
Tv[] tvArr = new Tv[100];

for (int i = 0; i < tvArr.length; i++) {
	tvArr[i] = new Tv();
}

당연히 객체 배열도 같은 타입의 객체만 저장할 수 있다
숭이에서 좀 더 진화하면 다형성을 통해 하나의 배열로 여러 종류의 객체를 다룰 수 있다고 한다~~

6. 클래스의 또 다른 정의

클래스

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

요렇게 나눌 수 있다고 한다

데이터 + 함수?

관계성이 있다면 다양한 변수 타입과 메서드를 한 클래스에서 다룰 수 있다
발전 과정은 다음과 같다.

  1. 변수 : 하나의 데이터를 저장할 수 있는 공간
  2. 배열 : 같은 종류의 데이터를 하나의 집합으로 저장할 수 있는 공간
  3. 구조체 : 서로 관련된 여러 데이터를 종류에 관계 없이 하나의 집합으로 저장할 수 있는 공간
  4. 클래스 : 데이터와 함수의 결합(구조체 + 함수)

사용자 정의 타입

원하는 타입을 직접 만들 수 있다..!!!!

요런 식으로

class Time {
	int hour;
    int minute;
    float second;
}

시, 분, 초를 하나로 묶는 사용자정의 타입을 저질러버렸다..

너무 길어서 다음 이시간에...

profile
어?머지?

0개의 댓글