1. 객체지향언어 : "객체"를 "지향"하는 언어 (객체 중심으로 돌아감)
2. 객체란?
-사전적 정의 : 현실세계에 독립적으로 존재하는 모든것들
-자바에서의 정의 : 메모리 영역 중 Heap영역에 생성되는 모든것들
3. 객체지향 프로그래밍 : 현실 세계의 객체들간의 상호작용 프로그래밍을 통해 가상세계로 구현하는 과정
4. 프로그램상에 필요한 객체들을 만들기 위해서는
=> 클래스라는 틀을 먼저 만들어야됨 (객체들의 속성값들을 담아낼 그릇같은 존재)
=> 추상화 + 캡슐화 접목해서
5. 추상화 과정
1) 내가 구현할 프로그램상에 필요한 객체들을 생각해보기
2) 그 객체들이 가지고 있는 공통적인 속성, 기능들을 모두 추출할 것
3) 추출한 것들을 가지고 내가 구현하고자하는 프로그램의 "실질적인 목적"에 맞춰 불필요한 것들을 제거해 나가기.
4) 최종적으로 추려진 속성들을 어떤 자료형으로, 어떤 변수명으로 할 것인지 생각
ex) 학생관리 프로그램
1) 학생 관련 객체(홍길동 학생, 김영희 학생, 김말똥 학생,..)
2) 공통적인 속성 및 기능들(이름,나이,주소,전화번호, 키, 몸무게,달리기속도,학년,반,국어점수,수학점수,머리색깔,발사이즈, 먹는다, 잠잔다,..)
3) 학생 "인적사항"을 관리하는 프로그램 : 이름,나이,주소,전화번호,학년,
학생 "성적"관리하는 프로그램 : 이름,학년,반,국어점수, 수학점수
학생 "건강"관리하는 프로그램 : 이름,나이,키,몸무게,학년,반,달리기속도,먹는다,잠잔다
**결국 추려진것이 "이름, 나이, 키" 라는 가정하에
4) 이름: String name
나이: int age
키: double height
6. 본격적인 프로그래밍
1) "변수"만으로 프로그래밍 한다면?
변수 = 하나의 자료형의 하나의 값만 보관
홍길동 학생 객체-> String name1 = "홍길동"; int age1 = 20; double heitht1 = 162.3;
김말똥 학생 객체-> String name2 = "김말똥"; int age2 = 21; double height2 = 173.5;
강개순 학생 객체->
...
>>>> 문제발생 => 수백명의 학생객체들을 만들고자 할때 수천개의 변수가 만들어짐
2) "배열"만으로 프로그램을 한다면?
배열 - 하나의 자료형에 여러개의 값들을 보관
학생들의 이름 String[] name= {"홍길동","김말똥","강개순",...};
학생들의 나이 int[] age = {20,21,22,...};
학생들의 키 double[] height = {162.3,173.4,182.7, ..};
>>> 문제발생 => 기존의 학생정보를 지울때 잘못 지우면 값이 변질될 수 있음.
새로운 학생정보를 추가할 때에도 배열의 크기 변경 불가로, 배열 복사 후 값 추가하는 번거로움발생
3) '구조체'개념
구조체 - 여러개의 자료형에 여러개의 값들을 보관할 수있음
String값도 담고, int값도 담고, double값도 담을 수 잇는 나만의 배열같은 자료형 => 클래스
Student라는 클래스 만들기 => model.vo (value object)
public static void main(String[] args) {
//자바에서의 객체로 만들기 위해서
// new라는 키워드를 이용해서 Heap영역에 생성
Student hong = new Student(); //객체 생성구문(참조 자료형)
hong.name = "홍길동";
hong.age = 20;
hong.height = 162.3;
System.out.println(hong); // 주소값
System.out.println(hong.name+"님의 나이는 "+hong.age+"이고, 키는 "+hong.height+"cm입니다.");
//김말똥 학생객체만들기
Student ddong = new Student();
ddong.name = "김말똥";
ddong.age = 21;
ddong.height = 172.3;
System.out.printf("%s님의 나이는 %d이고, 키는 %.1fcm입니다.",ddong.name,ddong.age,ddong.height);
'JAVA' 카테고리의 다른 글
6_3. 객체 _클래스 선언부 (0) | 2022.10.26 |
---|---|
6_2 . 객체 캡슐화 (setter/getter) (0) | 2022.10.26 |
5_2. 배열의 복사(ArrayCopy) (0) | 2022.10.25 |
5. 배열 Array (0) | 2022.10.24 |
4_5. 제어문_ 분기문 continue (0) | 2022.10.21 |