[객체지향언어]
* 객체지향언어란?
기존의 프로그래밍 언어에 몇가지 새로운 규칙을 추가한 언어이다.
절차적 언어에 익숙한 프로그래밍 습관을 객체지향적으로 바꿔야 할 것!
1. 코드의 재사용성이 높다.
새로운 코드를 작성할 때 기존의 코드를 이용해서 쉽게 작성할 수 있음
2. 코드의 관리가 용이하다.
코드관의 관계를 이용하여 코드를 쉽게 변경할 수 있음
3. 신뢰성이 높은 프로그래밍을 가능하게 한다.
제어자와 메서드를 이용해서 데이터를 보호하고 올바른 값을 유지함
코드의 중복을 제거해서 코드의 불일치로 인한 오류를 방지할 수 있음
[클래스와 객체]
* 클래스와 객체의 정의와 용도
클래스의 정의 : 객체를 정의해 놓은 것. 객체의 설계도 또는 틀.
클래스의 용도 : 객체를 생성하는데 사용되고, 클래스에 정의된 대로 생성됨.
예 : 스마트폰 설계도(클래스)는 스마트폰이라는 제품(객체)를 정의 한 것.
객체의 정의 : 실제로 존재하는 것. 사물 또는 개념.
객체의 용도 : 객체가 가지고 있는 기능과 속성에 따라 다름
객체지향이론에서는 사물과 같은 유형적인 것과 개념이나 논리와 같은 무형적인 것 모두 객체로 간주한다.
클래스는 객체를 생성하는데 사용될 뿐이지 객체 그 자체는 아니다.
우리가 원하는 기능의 객체를 사용하기 위해서는 클래스로부터 객체를 생성하는 과정이 선행되어야 한다.
JDK(Java Development Kit)에서는 수많은 클래스(Java API)를 제공하고 있다.
* 객체와 인스턴스
- 클래스의 인스턴스화(instantiate)
클래스로부터 객체를 만드는 과정
- 클래스의 인스턴스(instance)
어떤 클래스로부터 만들어진 객체
클래스 ---인스턴스화---> 인스턴스(객체)
* 객체의 구성요소 - 속성과 기능
속성(property) | 멤버변수(member variable), 특성(attribute), 필드(field), 상태(state) |
기능(function) | 메서드(method), 함수(function), 행위(behavior) |
예 : 속성 - 스마트폰 크기, 길이, 높이, 색상 등
기능 - 켜기, 끄기, 볼륨 업, 볼륨 다운 등
* 인스턴스의 생성과 사용
클래스명 변수명; // 클래스의 객체를 참조하기 위한 참조변수 선언
변수명 = new 클래스명(); // 클래스의 객체 생성 후, 객체의 주소를 참조변수에 저장
인스턴스는 참조변수를 통해서만 다룰 수 있고, 참조변수의 타입은 인스턴스의 타입과 일치해야 한다.
class smartphone {
// 스마트폰의 속성(멤버변수)
String color; // 색상
boolean power; // 전원상태(on/off)
int brightness; // 화면 밝기
// smartphone의 기능(메서드)
void power() {power = !power;} // 스마트폰을 켜거나 끄는 메서드
void brightnessUp() {++brightness;} // 스마트폰의 화면 밝기를 높이는 메서드
void brightnessDown() {--brightness;} // 스마트폰의 화면 밝기를 낮추는 메서드
}
public class test1 {
public static void main(String[] args) {
smartphone s1 = new smartphone();
smartphone s2 = new smartphone();
System.out.println("s1의 brightness값은 " + s1.brightness + "입니다.");
System.out.println("s2의 brightness값은 " + s2.brightness + "입니다.");
s1.brightness = 10;
System.out.println("s1의 brightness값을 10으로 변경하였습니다.");
System.out.println("s1의 brightness값은 " + s1.brightness + "입니다.");
System.out.println("s2의 brightness값은 " + s2.brightness + "입니다.");
}
}
스마트폰의 속성과 기능을 활용하여 만든 예제이다.
* 객체 배열
객체 배열 안에는 객체가 저장되는 것이 아니라, 객체의 주소가 저장된다.
객체 배열은 참조변수들을 하나로 묶은 참조 변수 배열이라고 보면 된다.
주의 !
객체를 생성하고 객체 배열의 각 요소에 저장하는 것을 잊지 말자! 배열만 생성한다고 끝나는 게 아니다.
- 객체 배열의 생성
smartphone[] smartphoneArr = new smartphone[3]; // 참조변수 배열을 생성
// 객체를 생성해서 배열의 각 요소에 저장
smartphoneArr[0] = new smartphone();
smartphoneArr[1] = new smartphone();
smartphoneArr[2] = new smartphone();
- 객체 배열의 초기화
배열의 초기화 블럭 사용
smartphone[] smartphoneArr = {new smartphone(), new smartphone(), new smartphone()};
for문 사용
smartphone[] smartphoneArr = new smartphone[100];
for (int i = 0; i < smartphoneArr.length; i++){
smartphoneArr[i] = new smartphone();
}
public class Hello {
public static void main(String[] args) {
smartphone[] smartphoneArr = new smartphone[3]; // 길이가 3인 객체 배열
// 스마트폰 객체를 생성해서 스마트폰 배열의 각 요소에 저장
for (int i = 0; i < smartphoneArr.length; i++) {
smartphoneArr[i] = new smartphone();
smartphoneArr[i].brightness = i + 10; // smartphoneArr[i]의 brightness에 i+10을 저장
}
for (int i = 0; i < smartphoneArr.length; i++) {
smartphoneArr[i].brightnessUp(); // smartphoneArr[i]의 메서드 호출, 밝기 1 증가
System.out.printf("smartphoneArr[%d].brightness=%d\n", i, smartphoneArr[i].brightness);
}
}
}
class smartphone {
// smartphone의 속성(멤버변수)
String color; // 색상
boolean power; // 전원상태(on/off)
int brightness; // 화면 밝기
// smartphone의 기능(메서드)
void power() {power = !power;} // smartphone을 켜거나 끄는 메서드
void brightnessUp() {++brightness;} // smartphone의 화면 밝기를 높이는 메서드
void brightnessDown() {--brightness;} // smartphone의 화면 밝기를 낮추는 메서드
}
'Programming Language > Java' 카테고리의 다른 글
[Java] 클래스(class) 문제 풀이 | 클래스(class)작성 예제, 엔클로징 인스턴스 오류 (1) | 2021.01.31 |
---|---|
[Java] 객체지향언어(2) | 변수와 메서드, 생성자 (1) | 2021.01.25 |
[Java] 배열(2) | String 배열, 다차원 배열 (1) | 2021.01.24 |
[Java] 배열(1) | 배열 선언, 생성, 초기화, 인덱스, 배열 길이, 배열 출력, 배열 복사, Array.toString (2) | 2021.01.18 |
[백준_자바] 2739번 : 구구단 | printf, for문 (2) | 2021.01.16 |