https://www.youtube.com/watch?v=CXuA31XcBZ0&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=51
https://github.com/castello/javajungsuk_basic
80년 초 소프트웨어의 위기 - 빠른 변화를 못 쫓아감
해결책으로 객체지향 언어를 도입(절차적 -> 객체지향)
코드의 재사용이 높고 유지보수가 용이, 중복 코드 제거
객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙)
객체지향의 핵심 개념
클래스의 정의(설계도) : 클래스란 객체를 정의해 놓은 것
클래스의 용도 : 클래스는 객체를 생성하는데 사용
객체의 정의(제품) : 실제로 존재하는 것. 사물 또는 개념
객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름
객체의 구성요소 - 속성과 기능
객체와 인스턴스
객체 : 모든 인스턴스를 대표하는 일반적 용어
인스턴스 : 특정 클래스로부터 생성된 객체(예:Tv인스턴스)
ex)
책상은 인스턴스다.
책상은 객체다.
책상은 책상 클래스의 객체다.
책상은 책상 클래스의 인스턴스다.
◆ 클래스가 왜 필요한가?
객체를 생성하기 위해
◆ 객체가 왜 필요한가?
객체를 사용하기 위해
◆ 객체를 사용한다는 것은?
객체가 가진 속성과 가능을 사용하려고
객체의 생성
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명(); // 클래스의 객체를 생성 후 , 객체의 주소를 참조변수에 저장
Tv t // Tv클래스 타입의 참조변수 t를 선언
t = new Tv(); // Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
객체의 사용
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 + "입니다.");
}
}
객체 배열 == 참조변수 배열
객체 배열은 참조변수의 배열이기 때문에 객체 배열을 만들고 나서, 반드시 채워 넣어야 객체가 생성이 된다.
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()};
Tv[] tvArr = new Tv[3]; // 참조 변수 배열만 만들어놓은 것 ! 아래처럼 객체를 생성해줘야함! 생성X > 오류발생
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
클래스(1. 설계도, 2. 데이터 + 함수, 3. 사용자 정의타입)
클래스 == 데이터 + 함수
사용자 정의 타입(우리가 정의한 타입) - 원하는 타입을 직접 만들 수 있다.
시간을 다루기 위한 타입이 기본형 8개에 포함되어 있지 않다.(시간을 저장하는 클래스도 없다고 쳤을 때)
변수를 아홉개로 선언했을 시 코드가 간결해지고, 시분초를 함께 묶을 수 있다.
왼쪽 코드(비객체지향 코드)보다 오른쪽 코드가 더 객체지향적인 코드이다.