728x90
객체 지향 언어 OOP
//객체지향 언어
//코드의 재사용성을 높이고, 유지보수가 쉽게하며, 코드의 중복 제거
//객체지향 언어 = 프로그래밍 언어 + 객체지향개념(규칙)
//객체지향개념의 규칙을 외우기
//핵심개념 : 캡슐화, 상속, 추상화, 다형성
클래스와 객체
//클래스와 객체
//클래스는 객체를 정의해놓은 것이며, 용도는 객체를 생성하는 데 사용
//객체는 실제로 존재하는 것이며, 용도는 객체가 가지고 있는 기능과 속성에 따라 다름
//즉, 클래스는 설계도, 객체는 제품이라고 생각하면 편함
//제품 설계도(클래스) - 제품(객체), TV 설계도(클래스) - TV(제품)
//객체의 구성요소 - 속성과 기능
//객체 = 속성(변수) + 기능(메서드)
//객체와 인스턴스
//객체 : 모든 인스턴스를 대표하는 일반적인 용어
// == 인스턴스 : 특정 클래스로부터 생성된 객체(ex, tv인스턴스)
// 클래스(설계도) --인스턴스화--> 인스턴스(객체)(제품)
//클래스(설계도)가 필요한 이유? 객체(제품)를 생성하기 위해
//객체(제품)가 왜 필요한 이유? 객체를(제품을) 사용하기 위해
//객체를 사용한다는 것은? 객체가 가진 속성(변수)과 기능(메서드)을 사용하기 위해
//TV라는 객체로 생각해봤을 때
//TV 속성은 크기, 길이, 높이, 색상, 볼륨, 채널 등으로 둘 수 있고,
//TV 기능은 켜기/끄기, 볼륨 변경, 채널 변경 등으로 둘 수 있음
//속성 -> 변수, 기능 -> 메서드
class TV{
int size; //크기
int length; //길이
int height; //높이
String color; //색상
int volumn; //볼륨
int channel; //채널
}
// void power() {
// power = !power;
// }
// void volumnUp() {
// volumn++;
// };
// void volumnDown() {
// volumn--;
// }
클래스 작성
//클래스 작성
//하나의 소스파일에는 하나의 클래스가 작성하는 것이 바람직
//public class가 있는 경우, 소스파일의 이름은 반드시 public class의 이름과 일치해야함
//public class에는 단 한 개의 클래스만 있어야함
//public class가 하나도 없는 경우, 소스파일의 이름은 아무렇게나 가능함
객체의 생성과 사용
//객체의 생성과 사용
//클래스 작성(설계도) -> 객체 생성(제품 생성) -> 객체의 사용(제품 사용) 순서
//객체의 생성
//클래스명 변수명; 클래스의 객체를 참조하기 위한 참조변수를 선언
//변수명 = new 클래스명(); 클래스의 객체를 생성한 후, 객체의 주소를 참조변수에 저장
//==> 클래스명 변수명 = new 클래스명();
// Tv t; Tv클래스 타입의 참조변수 t를 선언
// t = new Tv(); Tv인스턴스를 생성한 후, 생성된 Tv 인스턴스의 주소를 t에 저장
//객체의 사용
//객체의 변수, 메서드를 사용
//t.channel = 10; Tv인스턴스의 멤버변수 channel의 값을 10로 함. (변수 사용)
//t.channelDown(); Tv인스턴스의 메서드 channelDown()을 호출. (메서드 사용(호출))
//하나의 인스턴스를 여러 개의 참조변수가 가리키는 경우 -> 가능
//여러 인스턴스ㅇ를 하나의 참조변수가 가리키는 경우는 -> 불가능
//변수 하나의 값만 저장 가능
package chapter06;
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 Study04Ex1 {
public static void main(String[] args) {
Tv tv = new Tv(); //Tv 인스턴스를 참조하기 위한 변수 t에 Tv인스턴스를 대입
tv.channel = 7;
tv.channelUp();
System.out.println("현재 TV 채널은 " + tv.channel + "입니다");
}
}
package chapter06;
public class Study04Ex2 {
public static void main(String[] args) {
Tv tv1 = new Tv(); //Tv 인스턴스를 참조하기 위한 변수 t에 Tv인스턴스를 대입
Tv tv2 = new Tv();
System.out.println("tv1의 channel 값은 " + tv1.channel); //0
System.out.println("tv2의 channel 값은 " + tv2.channel); //0
tv1.channel = 7; //tv1의 channel 값을 7로 변경
System.out.println("tv1의 channel 값은 " + tv1.channel); //7
System.out.println("tv2의 channel 값은 " + tv2.channel); //0
}
}
package chapter06;
public class Study04Ex2 {
public static void main(String[] args) {
Tv tv1 = new Tv(); //Tv 인스턴스를 참조하기 위한 변수 t에 Tv인스턴스를 대입
Tv tv2 = new Tv();
System.out.println("tv1의 channel 값은 " + tv1.channel); //0
System.out.println("tv2의 channel 값은 " + tv2.channel); //0
tv1.channel = 7; //tv1의 channel 값을 7로 변경
System.out.println("tv1의 channel 값은 " + tv1.channel); //7
System.out.println("tv2의 channel 값은 " + tv2.channel); //0
tv2 = tv1;
System.out.println("tv1의 channel 값은 " + tv1.channel); //7
System.out.println("tv2의 channel 값은 " + tv2.channel); //0
}
}
객체 배열
//객체 배열
//객체 배열 == 참조변수 배열
//Tv tv1, tv2, tv3;
//Tv[] tvArr = new Tv[3]; == Tv[] tvArr = { new Tv(), new Tv(), new Tv() };
// tvArr[0] = new Tv();
// tvArr[1] = new Tv();
// tvArr[2] = new Tv();
클래스의 정의
//클래스의 정의
//설계도, 데이터 + 함수, 사용자정의 타입
//클래스 == 데이터 + 함수
//변수 : 하나의 데이터를 저장할 수 있는 공간
//배열 : 같은 종류의 여러 데이터를 하나로 저장할 수 있는 공간(같은 타입만)
//구조체 : 서로 관련된 여러 데이터를 하나로 저장할 수 있는 공간(다른 타입도 OK)
//클래스 : 데이터와 함수의 결합(구조체 + 함수(명령문 묶음))
//사용자 정의 타입 원하는 타입(클래스)을 직접 만들 수 있음
class Time{
int hour;
int minute;
int second;
}
Time time = new Time();
위치에 따른 변수
//선언위치에 따른 변수의 종류
//종류 : iv(instance variable, 인스턴스 변수), cv(class variable, 클래스변수, static변수, 공유 변수), lv(local variable, 지역변수)
//영역 클래스영역 - iv, cv(static + iv) 메서드 영역 - lv
//클래스 영역 : 선언문(변수, 메서드)만 가능, 순서는 상관없음
// 변수의 종류 선언 위치 생성시기
// 클래스 변수 클래스 영역 클래스가 메모리에 올라갈때(설계도가 필요할 때). 객체 생성 X -> 아무대나 사용가능
// 인스턴스 변수 클래스 영역 인스턴스가 생성되었을 때. 객체 생성 O
// 지역 변수 클래스 영역 이외의 영역 변수 선언문이 수행되었을 때
//객체는 iv변수 묶음
클래스변수, 인스턴스 변수
//클래스 변수(cv)와 인스턴스 변수(iv)
//객체마다 다르게 유지되어야 하는 값(개별 속성) => 인스턴스 변수
//모든 객체가 공통적으로 같아야하는 값(공통 속성) => 클래스 변수
package chapter06;
class Card{
//개별 => iv
String kind; //무늬
int number; //숫자
//공통 => cv
static int width = 100; //폭
static int height = 250; //높이
}
public class Study08Ex1 {
public static void main(String[] args) {
Card card = new Card();
//iv
card.kind = "Clover";
card.number = 7;
//cv => 통상적으로 cv는 Class.cv로 써야함. 참조변수를 사용하는 것도 가능은 하지만 권장하지 않음
// card.width = 200;
// card.height = 300;
Card.height = 200;
Card.width = 300;
}
}
728x90
'organize > 자바' 카테고리의 다른 글
Java 9 (0) | 2024.04.21 |
---|---|
자바 처음부터 다시 시작하기 8 (1) | 2024.04.20 |
자바 처음부터 다시 시작하기 6 (0) | 2024.04.17 |
자바 처음부터 다시 시작하기 5 (0) | 2024.04.15 |
자바 처음부터 다시 시작하기 4 (0) | 2024.04.14 |