객체지향 언어 = 프로그래밍 언어 + 객체지향 개념, 규칙
--> 코드의 재사용성을 높이고, 유지보수를 용이하게 해 줌.
객체지향 OOP (Object - Orinted Programing)의 핵심 특징
1. 캡슐화
2. 상속
3. 추상화
4. 다형성
* 클래스와 객체
클래스 : 객체를 정의해 놓은 것. 객체를 생성하는 데 사용함.
객체 : 실제로 존재하는 것. 그 자체..?
ex) 클래스 : 제품 설계도 / 객체 : 제품
인스턴스 : 특정 클래스로부터 생성된 객체
// 조금 다르겠지만 파이썬에서 함수를 생성--> 클래스 생성 / main 함수에서 호출 --> 인스턴스 만들기와 비슷한 듯하다.
* 클래스 작성 시 유의사항
기본적으로 소스파일 이름과 class 이름은 일치해야 함 (즉 하나의 소스파일에 하나의 클래스)
부득이하게 1개 이상 작성할 때, public class와 소스파일의 이름이 일치해야 함.
** Hello2.java 소스 파일 내
public class Hello2{}
class Hello3{} // okay
//public이 없는 경우 둘 다 가능
class Hello2{}
class Hello3{}
* 객체의 생성과 사용
객체의 생성
클래스명 변수명(참조 변수);
변수명 = new 클래스명(); // 마치 참조형 변수 선언하듯!
Tv t; // Tv클래스 타입의 참조변수 t 선언
t = new Tv(); // Tv인스턴스 생성, 주소를 t에 저장
Tv t = new Tv(); // 한 줄로 선언 및 생성 가능
객체의 사용 : 변수, 메서드 사용
t.channel = 7
t.channelDown();
* 객체 배열
객체 배열 == 참조 변수 배열
Tv[] tvArr = new Tv[3]; //선언
trArr[0] = new Tv(); //생성
trArr[1] = new Tv();
trArr[2] = new Tv();
Tv[] tvArr = {new Tv(), new Tv(), new Tv()}; // 선언, 생성 한번에하기
배열의 각 아이템이 Tv 인스턴스. (Tv 객체의 주소 값)

* 클래스의 정의
클래스는 세 가지 관점으로 볼 수 있음.
1. 설계도 (앞에 설명한 내용들)
2. 데이터 + 함수
구조체 : 서로 관련된 여러 데이터 (종류 관계 x)를 하나로 저장할 수 있는 공간
클래스 : 구조체 + 함수(메서드) - 서로 관련이 있어 하나로 묶음
3. 사용자 정의 타입
원하는 타입을 직접 만들 수 있음.
class Time{
int hour;
int minute;
int second;
}
Time t = new Time();
* 클래스 내 변수 선언 위치, 종류
영역 종류
1. 클래스 영역 - 선언문만 가능 (변수, 메서드)
2. 메서드 영역 - 메서드의 시작~끝
변수 종류
1. iv(instance variable) : 인스턴스 변수, 클래스 영역에서 선언 / 인스턴스(객체) 생성됐을 때 생성.
2. cv(class variable) : static + iv , 클래스 영역에서 선언 / 클래스가 Ram에 올라갈 때 자동 생성 (따로 선언하지 않아도) --> 아무 때나 사용 가능
3. lv (local variable) : 메서드 내 지역변수, 메서드 영역에서 선언 / 메서드가 호출될 때 생성, 종류 시 제거.
class Variables{
int iv; // 인스턴스 변수
static int cv; // 클래스 변수
void method(){
int lv = ; // 지역 변수
}
}
* 클래스 변수 인스턴스 변수
클래스에서 각 객체마다 개별적인 속성 : 인스턴스 변수(iv)
각 객체마다 공통적인 속성 : 클래스 변수 (cv)
ex) 카드 생성 class에서, 카드 번호, 무늬 = 개별적인 속성 --> iv
카드 가로, 세로 = 공통적인 속성 --> cv
class Card{
String kind; // 무늬
int number; // 숫자
static int width = 100; // 폭
static int height = 250;// 높이
}
iv, cv 호출
iv는 호출 및 선언 시 참조 변수 사용
cv는 호출 및 선언 시 클래스 이름 사용
Card c = new Card();
c.kind = "Heart";
c.number = 5;
Card.width = 200;
Card.height = 300;
객체가 2개 생기면 iv는 객체 수 맞춰서 생성됨.
그러나 cv는 객체 수와 상관없이 1 set만 생성됨. (iv와 cv는 메모리에서 생성되는 장소도 다름)
Card c1 = new Card();
Card c2 = new Card();
c1.weith = 50;
c1.height = 80;
System.out.println(c2.weith) // 50
System.out.println(c2.height) // 80
위 코딩처럼 Card 객체 c1, c2 2개 생성한 후 c1의 cv를 변경하면 c2의 cv도 함께 변경됨!
'코딩 > JAVA 공부' 카테고리의 다른 글
| [JAVA] 자바의 정석 _ 상속, 포함 (1) | 2022.10.08 |
|---|---|
| [JAVA] 자바의 정석 _ 메서드 (0) | 2022.10.07 |
| [JAVA] 자바의 정석 _ 배열 (1) | 2022.10.06 |
| [JAVA] 자바의 정석 _ 제어문 for, while/ continue, 반복문 이름 붙이기 (0) | 2022.10.06 |
| [JAVA] 자바의 정석 _ 제어문 if, switch / 임의의 정수 (0) | 2022.10.06 |