● 클래스
: 객체 지향 프로그래밍에서, 데이터와 그 조작 절차인 메소드를 정리한 객체의 추형을 정의한 것.
이를 통하여 동종의 객체를 정리하여 다룰 수 있게 된다.
→ 사용자가 타입을 정의 하여 응용하기 위한 것.
● 객체
: 실체와 그 데이터에 관련되는 동작(절차, 방법, 기능)을 모두 포함한 개념이다.
예를 들어 기차역에서 승차권을 발매하는 경우, 실체인 ‘손님’과 동작인 ‘승차권 주문’은 하나의 객체이다.
실체인 ‘역무원’과 동작인 ‘승차권 발매’도 하나의 객체이다.
→ 프로그램으로 묘사하려고 하는 주체.
● 캡슐화
: 연관된 데이터와 함수를 논리적으로 묶어놓은 것이다.
데이터를 보호하기 위해 다른 객체의 접근을 제한하는 접근 제한 수식자의 기능을 제공한다.
또한 캡슐화를 함으로써 데이터의 손상과 오류 발생을 최소화시킬 수 있으며, 이를 통해 독립성이 유지된다.
→ 원하는 데이터를 하나의 객체에 포함 시켜 작동하게 하는 것.
메소드 안에 있는 변수 = 지역 변수
클래스 생성 예시)
class Test {
int a; // (4B)
String b; // (4B)
float c; // (4B)
}
class 는 메인 클래스 전에 생성 해야 한다.
class 이름 : Test
test 타입은 int 값 하나, string 값 하나, float 한개 로 이루어져 있고 각 변수타입은 4B로 총 12B의 메모리를 할당 받는다.
클래스 안에 생성 된 변수들은 이제 값을 담을 수 있는 하나의 타입이 된 것이다.
● 클래스 객체화
Test t1 = new Test();
메인 클래스에서 클래스를 객체화하고 호출한다.
선언 : Test t1
테스트타입의 변수를 선언하겠다 이 선언 된 클래스를 간추려서 t1 이라고 하겠다.
즉 main class 위에 생성 된 class 는 하나의 타입이 된 것임으로 우리가 이전에 변수를 선언 했을때
int a; 라고 하는 것처럼 int = Test / a = t1 (이건 내 맘대로 정해도 된다) 이렇게 되는 것이다.
객체 생성 : t1 = new Test();
int a = 4; 라고 우리가 이전에 변수 선언했던 것과 마찬가지로,
a = t1 / new = Heap 에 메모리 할당을 받겠다 안내하는 것 / Test = 4 라고 생각하면 간단하다.
하지만 여기서 Test 는 변수 선언과 다른게 있다면 Test를 값이라고 부르는게 아니라 생성자라고 부른다.
● 생성자
: 메서드의 한 종류로써 인스턴스(객체)가 생성될때 마다 반드시 호출되며 인스턴스를 초기화 한다.
생성자는 클래스와 동일한 이름이어야 한다.
이 모든걸 아우르는 예제)
class Test { //클래스 생성
int a; // 생성 된 클래스 안에는 int 를 담는 a
String b; // 문자열 b
float c; // 실수를 담는 c 가 들어가 있다.
public void Test() {}; //생성자 class 이름과 동일하다.
}
public class Test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test t1 = new Test(); // 클래스 선언
t1.a=10; //t1 (클래스 변수 t1) 에 a (int) 에 10을 넣어 준다
t1.b= "값"; // t1 (클래스 변수 t1) 에 b (String) 에 "값"을 넣어 준다
t1.c= 3.14f; //t1 (클래스 변수 t1) 에 c (float) 에 3.14 을 넣어 준다
// f는 왜 붙여 주었는가? 3.14는 더블타입이라 f 를 붙여서 실수로 만들어줌
System.out.println(t1.a);
System.out.println(t1.b);
System.out.println(t1.c);
}
}
① Main class 위에 class Test 를 생성 해주었다. 해당 클래스는 int, String, float 를 모두 담고 있다.
② 해당 클래스를 main 에 생성 하기 위에 클래스 안에 생성자를 만들어 주었다. public void Test( ) { };
public 접근 제어자 / void 반환 값은 없음 / Test 생성자의 이름은 클래스 이름과 같아야 한다 / () 파라미터 값 없음
원하면 public void test (10, 값, 3.14f) { } 이렇게 생성해 주어도 된다.
하지만 생성자는 메서드의 일종임으로 값이 있는 생성자를 생성 해 주었다면
값이 없는 생성자 역시 같이 만들어주어 객체의 활용도를 높여야한다.
③ Main class 에서 위에 생성해준 class 를 객체화 시킨다. Test t1 = new Test(); 선언만 해주면 객체가 생성되고
이제 class Test는 t1 이란 이름의 기본타입 변수와 같은 느낌을 가진다.
④ class Test t1 에 있는 변수들에 값을 할당 해 줄때는 객체 이름. 클래스 내부의 변수이름 = 할당 값 으로 구성 된다.
t1.a = 10; / t1.b = "값" / t1.c = 3.14f
⑤ 프린트 하려고 할 때 역시 객체화 된 클래스 변수 값 a,b,c 를 불러오는 게 아닌
객체이름 . 객체내부의 변수 이름 (t1.a) 으로 불러온다.
'JAVA' 카테고리의 다른 글
[JAVA] 객체지향언어 (0) | 2023.02.26 |
---|---|
[JAVA] 객체지향 - 다양한 변수들 (0) | 2023.02.26 |
[JAVA] 객체지향 - 함수와 메서드 그리고 파라미터 (0) | 2023.02.23 |
[JAVA] 자바 머그게임 만들기 (0) | 2023.02.23 |
[JAVA] 자바 정렬 : 삽입 정렬 (insertion sort) (0) | 2023.02.23 |