자바의 정석(기초편)-객체지향편

MINK·2022년 6월 17일
0
post-thumbnail

자바의 정석 기초편 - 객체지향 ch6.1(강의 영상)

https://www.youtube.com/watch?v=CXuA31XcBZ0&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=51

자바의 정석 기초편(PPT 및 연습예제 파일 )

https://github.com/castello/javajungsuk_basic

자바의 정석 기초편

Chapter 6.1 객체지향 언어란?

80년 초 소프트웨어의 위기 - 빠른 변화를 못 쫓아감

해결책으로 객체지향 언어를 도입(절차적 -> 객체지향)

코드의 재사용이 높고 유지보수가 용이, 중복 코드 제거

객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙)

객체지향의 핵심 개념

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

6.2~4 클래스와 객체

클래스의 정의(설계도) : 클래스란 객체를 정의해 놓은 것

클래스의 용도 : 클래스는 객체를 생성하는데 사용

객체의 정의(제품) : 실제로 존재하는 것. 사물 또는 개념

객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름

객체의 구성요소 - 속성과 기능

  • 객체는 속성과 기능으로 이루어져 있다.
  • 속성은 변수로, 기능은 메서드로 정의한다.

객체와 인스턴스

  • 객체 : 모든 인스턴스를 대표하는 일반적 용어

  • 인스턴스 : 특정 클래스로부터 생성된 객체(예:Tv인스턴스)

    ex)

책상은 인스턴스다.

책상은 객체다.

책상은 책상 클래스의 객체다.

책상은 책상 클래스의 인스턴스다.

◆ 클래스가 왜 필요한가?

객체를 생성하기 위해

◆ 객체가 왜 필요한가?

객체를 사용하기 위해

◆ 객체를 사용한다는 것은?

객체가 가진 속성과 가능을 사용하려고

image-20220616164058713

6.6~7 객체의 생성과 사용

  1. 객체의 생성

    클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언

    변수명 = new 클래스명(); // 클래스의 객체를 생성 후 , 객체의 주소를 참조변수에 저장

    Tv t // Tv클래스 타입의 참조변수 t를 선언

    t = new Tv(); // Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장

  2. 객체의 사용

    t.channel = 7; // Tv인스턴스의 멤버변수 channel의 값을 7로 한다.
    t.channelDown(); // Tv인스턴스의 메서드 channelDown()을 호출한다.

    System.out.println("현재 채널은 " + t.channel + " 입니다.");

## 객체의 생성과 사용의 예시 ##

class Ex6_1 { 
	public static void main(String args[]) { 
		Tv t;                 // Tv인스턴스를 참조하기 위한 변수 t를 선언       
		t = new Tv();         // Tv인스턴스를 생성한다. 
		t.channel = 7;        // Tv인스턴스의 멤버변수 channel의 값을 7로 한다. 
		t.channelDown();      // Tv인스턴스의 메서드 channelDown()을 호출한다. 
		System.out.println("현재 채널은 " + t.channel + " 입니다."); 
	} 
}

class Tv { 
	// Tv의 속성(멤버변수)   
	String color;           // 색상 
	boolean power;         	// 전원상태(on/off) 
	int channel;           	// 채널 

	// Tv의 기능(메서드) 
	void power()   { power = !power; }  // TV를 켜거나 끄는 기능을 하는 메서드  
	void channelUp()   {  ++channel; }  // TV의 채널을 높이는 기능을 하는 메서드 
	void channelDown() { --channel; }   // TV의 채널을 낮추는 기능을 하는 메서드  
}
class Ex6_2 {
	public static void main(String args[]) {
		Tv t1 = new Tv();  // Tv t1; t1 = new Tv();를 한 문장으로 가능
		Tv t2 = new Tv();
		System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
		System.out.println("t2의 channel값은 " + t2.channel + "입니다.");

		t1.channel = 7;    // channel 값을 7으로 한다.
		System.out.println("t1의 channel값을 7로 변경하였습니다.");

		t2 = t1; // 참조변수 t1의 값을 t2에 저장.
		System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
		System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
	}
}

6.8 객체 배열

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

객체 배열은 참조변수의 배열이기 때문에 객체 배열을 만들고 나서, 반드시 채워 넣어야 객체가 생성이 된다.

img

Tv t1, tv2, tv3 ; ----> Tv[] tvArr = new Tv[3];

Tv[] tvArr = new Tv[3]; // 길이가 3인 Tv 타입의 참조변수 배열

tvArr[0] = new Tv();

tvArr[1] = new Tv();

tvArr[2] = new Tv();

위 3개를 아래처럼 변경 가능

Tv[] tvArr = {new Tv(), new Tv(), new Tv()};

img

Tv[] tvArr = new Tv[3]; // 참조 변수 배열만 만들어놓은 것 ! 아래처럼 객체를 생성해줘야함! 생성X > 오류발생

tvArr[0] = new Tv();

tvArr[1] = new Tv();

tvArr[2] = new Tv();

6.9 클래스의 정의(1)

클래스(1. 설계도, 2. 데이터 + 함수, 3. 사용자 정의타입)

클래스 == 데이터 + 함수

img

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

6.10 클래스의 정의(2)

사용자 정의 타입(우리가 정의한 타입) - 원하는 타입을 직접 만들 수 있다.

시간을 다루기 위한 타입이 기본형 8개에 포함되어 있지 않다.(시간을 저장하는 클래스도 없다고 쳤을 때)

변수를 아홉개로 선언했을 시 코드가 간결해지고, 시분초를 함께 묶을 수 있다.

img

img

왼쪽 코드(비객체지향 코드)보다 오른쪽 코드가 더 객체지향적인 코드이다.

profile
Ethan Velog

0개의 댓글