⦁ 객체지향 언어
80년 초 소프트웨어의 위기 – 빠른 변화를 못 쫓아감
해결책으로 객체지향 언어를 도입 (절차적->객체지향)
코드의 재사용성이 높고 유지보수가 용이, 중복 코드 제거
객체지향 언어(object-oriented programming) = 프로그래밍 언어 + 객체지향개념(규칙)
- 핵심개념
1. 캡슐화
2. 상속
3. 추상화
4. 다형성
⦁ 클래스와 객체
클래스란, 객체를 정의해 놓은 것.
클래스는 객체를 생성하는데 사용한다.
객체란, 실제로 존재하는 것. 사물 또는 개념.
객체의 용도는 객체가 가지고 있는 기능과 속성에 따라 다르다.
★클래스-객체 <-> 제품설계도-제품★
⦁ 객체의 구성요소 – 속성과 기능
객체 = 속성(변수) + 기능(메서드)
속성 – 크기, 길이, 높이, 색상, 볼륨, 채널 등
기능 – 켜기, 끄기, 볼륨 높이기, 채널 변경하기 등
⦁ 객체와 인스턴스
객체 – 모든 인스턴스를 대표하는 일반적 용어
인스턴스 – 특정 클래스로부터 생성된 객체
클래스->인스턴스화->인스턴스(객체)
⦁ 하나의 소스파일에 여러 클래스 작성
public class가 있는 경우, 소스파일의 이름은 반드시 public class의 이름과 일치해야한다.
public class가 하나도 없는 경우, 소스파일의 이름은 어떤 클래스나 가능.
⦁ 객체의 생성과 사용
- 객체의 생성
class Tv {
String color;
boolean power;
int channel;
void power() { power = !power; }
void channelUp() { channel++; }
void channelDown() { channel--; }
}
Tv t; // Tv클래스 타입의 참조변수 t를 선언
t = new Tv(); // Tv인스턴스를 생성한 후, 생성된 Tv인스턴스의 주소를 t에 저장
- 객체의 사용
t.channel = 7; // Tv인스턴스의 멤버변수 channel의 값을 7로 한다.
t.channelDown(); // Tv인스턴스의 메소드 channelDown()을 호출한다.
①클래스 작성(설계도) -> ②객체 생성(제품) -> ③객체 사용(제품 사용)
ex)
class Tv {
String color;
boolean power;
int channel;
void power() {
power = !power;
}
void channelUp() {
++channel;
}
void channelDown() {
--channel;
}
}
public class Ex6_1 {
public static void main(String[] args) {
Tv t;
t = new Tv();
t.channel = 7;
t.channelDown();
System.out.println("현재 채널은 " + t.channel + " 입니다.");
}
}
ex) 참조변수의 영향
public class Ex6_2 {
public static void main(String[] args) {
Tv t1 = new Tv();
Tv t2 = new Tv();
System.out.println("t1의 channel 값은 " + t1.channel + "입니다.");
System.out.println("t2의 channel 값은 " + t2.channel + "입니다.");
t1.channel = 7;
System.out.println("t1의 channel 값을 7로 변경하였습니다.");
t2 = t1;
System.out.println("t1의 channel 값은 " + t1.channel + "입니다.");
System.out.println("t2의 channel 값은 " + t2.channel + "입니다.");
}
}
⦁ 객체 배열
객체 배열 == 참조변수 배열
class Tv {
String color;
boolean power;
int channel = 9;
void power() {
power = !power;
}
void channelUp() {
++channel;
}
void channelDown() {
--channel;
}
}
public class Practice {
public static void main(String[] args) {
Tv[] tvArr = new Tv[3];
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
// 또는 Tv[] tvArr = { new Tv(), new Tv(), new Tv() }; 로 한번에 작성 가능
}
}
⦁ 클래스의 정의
클래스 – 1) 설계도 2) 데이터+함수 3) 사용자 정의 타입 / 3가지로 정의할 수 있다.
사용자 정의 타입 – 원하는 타입을 직접 만들 수 있다.
⦁ 선언 위치에 따른 변수의 종류
클래스 영역 – 인스턴스 변수(instance variable)
- 클래스 변수(class variable, static+iv)
클래스 영역은 선언문만 존재 가능, 선언문의 순서는 상관 없음.
메소드 영역 – 지역 변수(local variable)
class Variables {
int iv; // 인스턴스 변수
static int cv; // 클래스 변수(static 변수, 공유 변수)
void method() {
int lv = 0; // 지역변수
}
}
(객체는 iv의 묶음이다... 라고 일단 생각하자)
⦁ 클래스 변수와 인스턴스 변수
인스턴스 변수(개별 속성), 클래스 변수(공통 속성)
class Card {
String kind; // 무늬
int number; // 숫자
static int width = 100; // 폭
static int height = 250; // 높이
}
public class Practice2 {
public static void main(String[] args) {
Card c = new Card();
c.kind = “HEART”;
c.number = 5;
c.width = 200; // -> Card.width = 200;
c.height == 300; // -> Card.height = 300; 이렇게 쓰는게 바람직하다.
}
}
ex)
public class Ex6_3 {
public static void main(String[] args) {
System.out.println("Card.width = " + Card.width);
System.out.println("Card.height = " + Card.height);
Card c1 = new Card();
c1.kind = "Heart";
c1.number = 7;
Card c2 = new Card();
c2.kind = "Heart";
c2.number = 4;
System.out.println("c1은 " + c1.kind + ", " + c1.number + "이며, 크기는 (" + Card.width + ", " + Card.height + ")");
System.out.println("c2는 " + c2.kind + ", " + c2.number + "이며, 크기는 (" + Card.width + ", " + Card.height + ")");
System.out.println("c1의 width와 height를 각각 50, 80으로 변경합니다.");
Card.width = 50;
Card.height = 80;
System.out.println("c1은 " + c1.kind + ", " + c1.number + "이며, 크기는 (" + Card.width + ", " + Card.height + ")");
System.out.println("c2는 " + c2.kind + ", " + c2.number + "이며, 크기는 (" + Card.width + ", " + Card.height + ")");
}
}
class Card {
static int width = 100;
static int height = 250;
String kind;
int number;
}
출처 : 남궁성의 정석코딩 유튜브
'Java > Java의 정석' 카테고리의 다른 글
220308 Java - Chapter 7. 객체지향개념 II Part 1 (0) | 2022.03.09 |
---|---|
220307 Java - Chapter 6. 객체지향 개념I Part. 2 (0) | 2022.03.07 |
220304 Java - Chapter 5. 배열 (0) | 2022.03.04 |
220303 Java - Chapter 4. 조건문 (0) | 2022.03.03 |
220302 Java - Chapter 3. 연산자(Operator) (0) | 2022.03.02 |