210730(금) 자바 9일차 - 객체지향개념 / 클래스 / 메소드 / 오버로딩 / 객체배열
<객체지향언어 - OOP(Object Oriented Programming)>
: 객체지향은 가상화작업이다~!!
: 모의실험을 목적으로 사용
: 실제 사물의 속성(데이터)과 기능(메소드)을 정의하여 가상세계를 구현, 가상화 작업
ex) 데이터: 김밥/메소드: 사진찍기, 가방들기 등 역할분담
- 가상화 예시
· 속성 (데이터) : 김밥/오뎅
· 기능 : 돈받기/음식만들기
· 문서 : 메뉴판(클래스)
cf) 메뉴판은 메뉴판일뿐 실제 음식이 아니다 ---> 클래스는 반드시 new를해서 메모리에 음식(데이터)을 주문(생성)해야 한다!
: 모의실험을 통해 많은 시간과 노력을 절감
: 객체지향이론은 캡슐화, 상속, 추상화 개념
: 코드의 재사용이 높다
: 유지보수가 용이하다
: 캡슐화, 상속, 다형성의 특징
cf) 자바
: 로직 / 클래스/ 고급기술 <-- 크게 세부분!
: 클래스 상속 인터페이스 가 젤 중요!! (네트워크 IO 쓰레드는 별로 안중요/고급 기술 파트로 나중에 나옴)
cf) 머신러닝, 인공지능 : 데이터를 만들어서 컴퓨터를 교육시키는 거
따라서 데이터 넣기 전에 웹파트 에서 데이터 전처리를 해주는 것 ---> 우리가 할일(웹다루니까)
cf) 그래서 구글이 데이터 수집해서 다시 되파는 식으로 돈번다~!!!!!
<클래스>
:객체를 정의한 것
[형식]
class 클래스명 {
접근제한자 자료형 필드명;
접근제한자 메소드() {
} class Inner클래스명 {
}
}
# 특징
1. 캡슐화(감춘다!!): 안에다가 이상한거 넣을 수도 있고 아무렇게나 갖다 쓸 수 있으니까
---> private 변수 (↔ public) : 일촌관계, 자신의 클래스 안에서만 접근 허용
setter 메소드 : 데이터를 받는쪽
getter 메소드 : 데이터를 내보내는 쪽
2. 상속성
3. 다형성
클래스는 속성과 기능 두 부분으로 나눠진다.
ex) 객체지향 프로그램 - 라면 자판기
클래스
↙ ↘
속성 기능
라면 물의 양
물 온도
스프
젓가락
new라는 연산자를 이용해서 생성하면 메모리 heap에 할당된다
heap영역에 할당된 것은 이름이 없다!! <--- 항상 이름대신 주소로~!!!!!(배열처럼...?)
<메소드>
<setter, getter>
- private 일때는 setter/getter 메소드로 다른데로 내보내야한다!
· setter 메소드 ---> set : 데이터를 받기만 하는 중간다리 역할, 받아서 줌, main클래스에서 받아서 private로 보내 주는 중간자
cf) 그래서 private 데이터들을 여기다 담아서 내보낼 수 있음
· getter 메소드 ---> get : 데이터를 내보내기만 하는, 중간자, private에서 받아서 main 클래스로 보내주는 중간자
cf) getter는 하나씩밖에 리턴이 안됨. --> cf) 자바는 하나씩만인데 파이썬은 여러개 가능
- 메인함수 입장: set에 넣고 get으로 가져온다!
cf) ( ) <--- 함수의 괄호안에있는 것을 매개변수(파라미터), 인수 라고 부름~!!
cf) this.
~> this: 클래스 꺼다!!!
회사가면 클래스가 무식하게 많으니까 받는 변수명을 똑같이 쓰는 관행이 있어서 this 이용~!!! 평상시는 생략해둔거고 이렇게 변수명과 같을때는 명시하는 것!!
<Overload 메소드 Overloading>
=>같은 집안 쌍둥이 느낌
- 메소드명은 똑같다
· 하나의 클래스안에서 (같은 클래스 안에서) 똑같은 이름의 메소드가 2개이상 존재 할 때
· 인수(매개변수)형이 다르거나
· 인수(매개변수) 개수가 다른 경우
cf) 리턴 타입은 상관이 없음
class AA {
public void sub(int a){}
}
cf) 1번과 6번은 같은거라서 에러가 난다 => 리턴 타입은 상관이 없어서!!!
class BB{
public void sub(int a){}
public void sub(String a){}
public void sub(char a){}
public void sub(int a, int b){}
public void sub(){}
public int sub(int a){}
}
<객체배열>
cf) new 연산자는 객체를 힙메모리에 할당한다
cf) 도트(.) 연산자의 의미는 참조변수가 실제 객체를 찾아가서 객체의 멤버변수 값을 가져오는 것
cf) 자바에는 구조체가 없어 클래스로 구조체를 사용한다 그래서 이미 만들어진 클래스를 가져와서 생성...!!!!!
ex)
1. Compute[] ar = new Compute[3]; // 객체 배열 : 클래스가 아닌 단지 배열을 생성한 것!!! <=중요! 클래스는 두번째로 생성!
2. ar[0] = new Compute(); //이제 Compute 클래스 생성 ---> new 연산자로 이미 만들어져있는 구조체 역할을 하는 클래스를 힙 메모리에 잡는다
3. 값 주기
ar[0].setX(320);
ar[0].setY(258);
ar[0].calc();
=> 이런식으로 클래스에서 메소드를 이용해서 값을 준다. 객체배열 0번방에..!!! (마찬가지로 다른 방들에도~!!)
- 배열 성적표 문제를 객체 배열로 다시 풀어보기
- 객체 배열 생성방법 세가지 모두 가능~!!
cf) 선언문과 명령문!!!