예시) 자동차(객체)= 데이터(바퀴, 핸들, 차체 등)
+ 기능(주행보조기능, 길찾기)
위 두 문장은 접근방식의 치이가 있다.
★ oop의 특징 ★ 캡-추-상-다
1. 캡슐화 : 데이터의 구조와 기능을 하나의 캡슐형태로 만들어
외부에서는 형태를 알 수 없도록 하는 방법
2. 추상화 : 객체의 공통적인 필드와 기능을
하나의 형태로 정의하는 설계 방법
**OOP 의 장점
1. 코드 재사용성 증가
2. 생산성 향상
3. 유지보수가 쉬움
**OOP 의 단점
1. 개발 속도가 느림
2. 실행 속도가 느림
3. 코드의 난이도 상승
클래스 정의
클래스 용도
객체 정의
: 클래스의 정의된 내용에 맞춰 메모리에 생성된 형태
객체 용도
: 정의한 클래스 내용에 따라 속성과 기능이 다름
☆객체와 인스턴스
Class A ---> instantiation ---> JVM
private int count; new A()
private itn getCount(); new B()
new C()

-인스턴스의 생성과 사용

**참조 타입이기에 배열로 생성할수있다.
** 클래스에 정의된 형태로 사용하기 위해서는
참조변수 뒤에 점.을 찍고,
함수이름을 호출해주면 된다.
클래스 변수와 인스턴스 변수

-이제 클래스를 정의할때 사용할 수 있는 변수의 종류는..
총 3가지 이다..
-클래스변수/ 인스턴스변수/지역변수 이다.



-생성자(constructor)란?
1. new키워드로 인스턴스를 생성할 때, 제일 먼저 실행되는 메소드
모든 클래스는 하나 이상의 클래스가 정의 되어야 하는데..
만약 생성자를 명시하지 않으면.. 컴파일러가 자동으로 추가를 해준다.
생성자가 하나라도 정의되어 있음..
컴파일러가 기본 생성자를 별도로 추가하지 않는다.

★ 매개변수가 있는 생성자
: 메서드처럼 매개변수를 인자로 받아 인스턴스 초기화에
값을 사용할 수 있는 생성자이다

★ this()와 this 키워드
this()
같은 클래스 내부의 다른 생성자를 호출할 때 사용
생성자 첫 문장에서만 가능
this
인스턴스 자신을 가르키는 참조변수
인스턴스의 주소가 저장, 숨겨진 채로 존재
static 메서드에서는 사용 불가

<바로 위 그림 코드로 한번 확인 설명>
생성자 중에서 매개변수가 유저네임만 받는 생성자에서..
매개변수가 2개 있는 생성자를 호출하는 것을 확인할수있다.
이때 this메서드를 사용해서.. 다른 생성자를 호출한다.
매개변수가 2개인 메서드는
this 키워드를 호출해서..
변수를 선언하고 있다.
★이뜻은 객체가 생성이 될때..
객체 자기 자신을 가리키고,
-자기 자신이 인스턴스변수이다.
유저 네임과 유저 아이디를 초기화 하라는 뜻이다.
객체가 생성될때 자기자신을 가리키고,
자기 자신의 인스턴스 변수
유저네임과 유저아이디를 초기화 하라는 뜻이다..
**메소드(Method)란?
어떤 특정한 기능을 수행하기 위한 명령문들의 집합체
**구성은 크게 두부분으로 나뉨
선언부
구현부
**메소드의 구성요소
-선언부
: 접근제어자, static/final keyword,
메소드 이름, 매개변수 선언, 반환타입으로 구성

-구현부
: 지역변수, 수행될 실행문, return문으로 구성
: void형일 경우

★ 매개변수의 종류
: 메서드에서 넘겨받는 매개변수의 종류는 크게 두가지
-기본형 매개변수: 기본 데이터형으로 넘겨 받는 매개변수, 읽기만 가능
-참조형 매개변수: 인스턴스의 주소를 넘겨 받는 매개변수, 읽고 변경 가능
-참조형매개변수 = 객체형매개변수
-참조변수 = 객체변수
★반환 값의 종류
: 메서드 종료 시, return이 되는 대상에 따라 나뉨
-기본형 반환 값: 기본형을 반환하는 것은 기본형 데이터를 반환
-참조형 반환 값: 참조형을 반환한다는 뜻은 객체의 주소를 반환
강사님曰) 지금까지 메서드 구성에 대해서 살펴봤고,
이제는 메서드가 호출 될때 동작되는 것을 알아보자
JVM=자바버추얼머신
JVM은 여러 모듈로 구성되어 있고,
어플리케이션이 동작할때 사용될때 메모리 공간이
롱타임데이터 에어리어입니다..
롱타임데이터 에어리어는 다시 5개 영역으로 나눌 수 있다.

===
★호출스택
-스택에서 메소드의 작업에 필요한 메모리 공간 제공
-메소드의 작업에 필요한 메모리 공간 제공
✔ 메소드가 작업을 수행하는 동안 지역변수들과
연산의 중간결과 등을 저장하는데 사용.
✔ 메소드가 작업을 마치면 할당되었던 메모리는 반환
✔ 호출 스택 제일 상위에 위치하는 메소드가 현재 실행 중인 메소드,
나머지는 대기
✔ 객체를 생성하지 않고 호출하기 위해서는 static keyword
<호출스택을 코드와 함께 살펴보자>

★ static/인스턴스 메서드
*static메서드

강사님曰)
: 오버로딩(overloading)란?
한 클래스에 내부에 같은 메소드 이름으로 서로 다른
여러 메소드를 정의하는 것을 말한다.
★메소드의 매개변수 메소드의 시그니처가 달라야 한다.
★반환타입은 오버로딩과 관련이 없다.
메소드의 매개변수의 수 혹은 타입이 달라야 함
반환 타입은 상관 없음
아래 그림파일처럼..
하나의 메소드

오버로딩과 가변인자
: 메소드의 매개변수를 동적으로 지정할 수 있는 기능(>=JDK1.5)
-가변인자의 선언: 데이터타입.. 변수명
-가변인자는 메소드 매개변수의 마지막에 선언해줘야 함
-가변인자를 선언한 메서드는 되도록 오버로딩 하지 않는 것이 좋음


-컨디션 condition
1.(몸과 마음의 상태) (physical/mental)
2.(사물의 조건·상태) condition
강사님曰) 소스코드를 보면..
package Chapter6;
class Human {//클래스를 휴먼으로 보고
// 각 데이터 형에 맞는 변수를 선언해줬다.
//2개 사용 위치
int age;
//3개 사용 위치
int weight;
//3개 사용 위치
int height;
//2개 사용 위치
String name;
//2개 사용 위치 //gender //성별, 성 구분
String gender;
//1개 사용 위치
public Human(int age, int weight, int height, String name, String gender) {
this.age = age;
this.weight = weight;
this.height = height;
this.name = name;
this.gender = gender;
}
//반환할 수 있는 다양한 get()메소드를 직접입력도 가능
// 하지만 IDE에서 제공해주는 기능을 이용해줘도 좋다.
//1개 사용 위치
public int getAge() { return age; }
//1개 사용 위치
public int getWeight() { return weight; }
public int getHeight() { return height; }
public String getName() { return name; }
//1개 사용 위치
public String getGender() { return gender; }
//1개 사용 위치
//BMI 수치를 계산하는 메서드는
-키를 리터럴로 변환해서 제곱을 하고
-이 값으로 몸무게를 나눠야 한다.
따라서 키 나누기 100을 제곱하고,
그 값에 ??를 곱하게 되면..
키를 리터럴로 환산한 값의 제곱이 나오게 된다.
이 값으로 몸무게를 나눠주면 된다.
public double getBMI() {
return Math.round(weight / Math.pow(height, 2) * 10000);
}
}
// 실제로 main()메서드에서는 아래 프린트(클래스명.get변수명())메서드로 호출하면 된다.
public class Assignment {
public static void main(String[] args) {
Human human = new Human(30, 74, 177, "test", "male");
System.out.println(human.getAge());
System.out.println(human.getGender());
System.out.println(human.getName());
System.out.println(human.getWeight());
System.out.println(human.getHeight());
System.out.println(human.getBMI());
}
}