Goru
[Java] 객체지향 언어 본문
객체지향언어
- 코드의 재사용성이 높다
새로운 코드를 작성할떄 기존의 코드를 이용하여 쉽게 작성할 수 있다. - 코드의 관리가 용이하다.
코드간의 관계를 이용해서 적은 노력으로 쉽게 코드를 변경할 수있다. - 신뢰성이 높은 프로그래밍을 가능하게 한다.
제어자와 메서드를 이용해서 데이터를 보호하고 올바른값을 유지하도록 하며,
코드의 중복을 제거하여 코드의 불일치로 인한 오동작을 방지할수 있다.
클래스와 객체
클래스와 객체의 정의와 용도
클래스의 정의 클래스란 객체를 정의해 놓은 것이다. 클래스의 용도 클래스는 객체를 생성하는데 사용된다. |
객체의 사전적인 정의는 ' 실제로 존재하는 것' , 프로그래밍에서의 객체는 클래스에 정의된 내용대로 메모리에 생성된
것
객체의 정의 - 실제로 존재하는 것 , 사물 또는 개념 객체의 용도 - 객체가 가지고 있는 기능과 속성에 따라 다름 |
※ 프로그래밍에서는 먼저 클래스를 작성한 다음, 클래스로부터 객체를 생성하여 사용한다.
클래스 | 객체 |
제품 설계도 | 제품 |
TV 설계도 | TV |
붕어빵 기계 | 붕어빵 |
객체와 인스턴스
클래스로부터 객체를 만드는 과정을 클래스의 인스턴스화라고 하며, 어떤 클래스로 부터 만들어진 객체를
그 클래스의 인스턴스라고 한다.
객체의 구성요소 - 속성과 기능
객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 일반적으로는 객체는 다수의 속성과 기능을 갖는다.
클래스란 객체를 정의한 것이므로 클래스에는 객체의 모든 속성과 기능이 정의 되어있다.
클래스로부터 객체를 생성하면, 클래스에 정의된 속성과 기능을 가진 객체가 만들어 지는 것이다.
속성 - 멤버변수, 특성, 필드, 상태 기능 - 메서드, 함수, 행위 |
인스턴스의 생성과 사용
클래스명 변수명; //클래스의 객체를 참조하기 위한 참조변수를 선언
변수명 = new 클래스명(); //클래스의 객체를 생성 후, 객체의 주소를 참조변수에 저장
Tv t; //Tv 클래스 타입의 참조변수 t를 선언
t = new tv(); //Tv 인스턴스를 생성한후, 생성된 Tv인스턴스 주소를 t에 저장
class Tv{
//Tv의 속성(멤버변수)
String color;
boolean power;
int channel;
//Tv의 기능(메서드)
void power() { power =!power;} //Tv를 켜거나 끄는 기능을 하는 메서드
void channelUp() {++channel;} //Tv의 채널을 높이는 기능을 하는 메서드
void channelDown() {--channel;}//Tv의 채널을 낮추는 기능을 하는 메서드
}
public class TvTest {
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 + "입니다.");
}
}
현재 채널은 6입니다.
class Tv{
//Tv의 속성(멤버변수)
String color;
boolean power;
int channel;
//Tv의 기능(메서드)
void power() { power =!power;} //Tv를 켜거나 끄는 기능을 하는 메서드
void channelUp() {++channel;} //Tv의 채널을 높이는 기능을 하는 메서드
void channelDown() {--channel;}//Tv의 채널을 낮추는 기능을 하는 메서드
}
public class TvTest2 {
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로 변경하였습니다.");
System.out.println("t1의 channel값은 " + t1.channel + "입니다.");
System.out.println("t2의 channel값은 " + t2.channel + "입니다.");
}
}
t1의 channel값은 0입니다.
t2의 channel값은 0입니다.
t1의 channel 값을 7로 변경하였습니다.
t1의 channel값은 7입니다.
t2의 channel값은 0입니다.
class Tv{
//Tv의 속성(멤버변수)
String color;
boolean power;
int channel;
void power() {power =!power;}
void channelUp() { ++ channel;}
void channelDown() { --channel;}
}
public class TvTest3 {
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 +"입니다");
t2=t1; //t1이 저장하고 있는 값(주소)을 t2에 저장한다.
t1.channel =7; //channel 값을 7로한다.
System.out.println("t1의 channel값을 7로 변경하였습니다.");
System.out.println("t1의 channel값은" +t1.channel + "입니다.");
System.out.println("t2의 channel값은" +t2.channel + "입니다.");
}
}
t1의 channel값은0입니다
t2의 channel값은0입니다
t1의 channel값을 7로 변경하였습니다.
t1의 channel값은7입니다.
t2의 channel값은7입니다.
객체 배열
많은 수의 객체를 다뤄야할 떄, 배열로 다루면 편리할 것이다. 객체 역시 배열로 다루는 것이 가능하며, 이를
'객체 배열'이라고 한다.
Tv tv1, tv2, tv3; → Tv[] tvArr =new Tv[3]; |
※ 객체 배열을 생성하는 것은, 그저 객체를 다루기 위한 참조변수들이 만들어진 것일 뿐, 아직 객체가 저장되지 않았다.
객체를 생성해서 객체 배열의 각 요소에 저장하는 것을 잊어서는 안된다.
Tv[] tv Arr = new Tv[3]; // 참조변수 배열(객체 배열)을 생성
//객체를 생성해서 배열의 각 요소에 저장
tvArr[0] = new Tv();
tvArr[1] = new Tv();
tvArr[2] = new Tv();
Tv [] tv Arr = { new Tv(), new Tv(), new Tv()};
Tv[] tvArr = new Tv[100];
//다뤄야 할 객체의 수가 많을 때는 for문을 사용
for(int i=0; i<tvArr.length;i++){
tvArr[i] = new Tv();
}
class TvTest4 {
public static void main(String[] args){
Tv[] tvArr = new Tv[3]; //길이가 3인 Tv객체 배열
//Tv객체를 생성해서 Tv 객체 배열의 각 요소에 저장
for(int i = 0; i< tvArr.length;i++){
tvArr[i] = new Tv();
tvArr[i].channel = i+10; // tvArr[i]의 메서드를 호출. 채널이 1 증가
System.out.printf("tvArr[%d].channel =%d%n",i, tvArr[i].channel);
}
}
}
class Tv {
String color;
boolean power;
int channel;
void power() {power = !power;}
void channelUp() {++channel;}
void channelDown(){ --channel;}
클래스의 또 다른 정의
프로그래밍적인 관점에서 클래스의 정의와 의미
1. 클래스 - 데이터 함수의 결합
1.변수 - 하나의 데이터를 저장할 수 있는 공간 2.배열 - 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간 3.구조체 - 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간 4.클래스 - 데이터와 함수의 결합(구조체 함수) |
자바와 같은 객체지향 언어에서는 변수(데이터)와 함수를 하나의 클래스에 정의하여 서로 관계가 깊은 변수와 함수들을
함께 다룰 수 있게 했다.
서로 관련된 변수들을 정의하고 이들에 대한 작업을 수행하는 함수들을 함께 정의한 것이 바로 클래스이다.
2. 클래스- 사용자정의 타입
프로그래밍언어에서 제공하는 자료형 외에 프로그래머가 서로 관련된 변수들을 묶어서 하나의 타입으로 새로 추가하는 것을 사용자정의 타입이라고 한다.
자바와 같은 객체지향언어에서는 클래스가 곧 사용자 정의 타입이다.
int hour; //시간을 표현하기 위한 변수
int minute; // 분을 표현하기 위한 변수
float second; //초를 표현하기 위한 변수
int hour1,hour2,hour3;
int minute1, minute2, minute3;
float second1, second2, second3;
int[] hour = new int[3];
int[] minute = new int[3];
float[] second = new second[3];
class Time{
int hour;
int minute;
float second;
}
'Java' 카테고리의 다른 글
[Java] JVM 메모리 구조 (0) | 2022.01.07 |
---|---|
[Java] 변수와 메서드 (0) | 2022.01.05 |
[Java] 배열의 활용 (0) | 2022.01.03 |
[Java] 배열 (0) | 2021.12.29 |
[Java] break,continue문 (0) | 2021.12.28 |