JAVA

210730(금) 자바 9일차 - 객체지향개념 / 클래스 / 메소드 / 오버로딩 / 객체배열

구름이팡팡 2021. 7. 30. 10:14
728x90

<객체지향언어 - 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번방에..!!! (마찬가지로 다른 방들에도~!!)

객체배열 메모리 저장하는 방식
클래스와 배열의 메모리잡는 차이: 클래스는 꼭 1인분 단위로~!!!/ 배열은 자료형 단위로!!!

- 배열 성적표 문제를 객체 배열로 다시 풀어보기

클래스는 배열과 다르게 1인분 단위로~!!

- 객체 배열 생성방법 세가지 모두 가능~!!

객체 배열 생성방법 세가지 모두 가능~!!!

 


cf) 선언문과 명령문!!!

 

728x90