[코드스테이츠] 04_21_TIL : 객체지향 _ 클래스, 객체, 필드, 메서드
Today I Lean
객체지향 _ 클래스, 객체, 필드, 메서드
일단 이제까지 클래스, 객체는 비교적 많이 들었기 때문에 음... 그래... 하고 넘어갈 수 있었는데
필드????? 메서드?????
개념이 잡힐듯 말듯.. 될듯 말듯
답답하다
일단 메서드는 자바스크립트로 보면 DIV와 비슷한 느낌
필드는... 모든 변수를 총칭하는?
학습목표 및 개념정리
# 클래스(Class) 와 객체 (Object)
- 객체를 이해할 수 있다.
- 클래스의 개념과 구성요소, 기본 문법을 설명할 수 있다.
- 객체의 두가지 구성요소인 속성과 기능을 이해할 수 있다.
- 클래스와 객체의 차이를 알고, 관계를 정의할 수 있다.
# 필드(Field)와 메서드 (Method)
- 객체의 속성을 정의하는 필드를 이해하고, 세 가지 종류의 변수를 구분할 수 있다.
- 각각의 변수가 저장되는 위치와 그 차이를 설명할 수 있다.
- static 키워드를 설명할 수 있다.
- 객체의 기능을 정의하는 메서드를 이해하고, 메서드의 구성요소와 호출에 대해 설명할 수 있다.
- 메서드 오버로딩을 이해하고 그 장점을 설명할 수 있다.
배운 것
# 클래스(Class) 와 객체 (Object)
1. 객체 (Object)
: 눈으로 보이고 만지고 인지 할 수 있는 모든 사물
: 실재 하는 어떤 대상
→ 클래스에 정의되고 설계된 내용 대로 생성됨
→ 모든 인스턴스를 포괄
→ 객체가 메모리로 올라가 있으면 '인스턴스'
2. 클래스 (Class)
: 객체를 정의한 설계도 or 틀
→ 객체생성에 사용
→ 객체를 생성하는데에 사용되는 기준?
클래스명 참조_변수명 = new 생성자();
Class test = new class();
// 클래스생성 변수명 = 메모리에저장 클래스주소(안에있는 객체를);
3. 인스턴스 (instance)
: 클래스를 통해 생성된 객체
: 해당 객체가 어떤 클래스로부터 생성된것인지가 강조됨
→ 소회의실 , 단톡방 , 인던
→ 한 번 사용하고 사라지는?
→ 잠시 저장되는 저장소?
*인스턴스화 (instantiate) : 클래스로부터 객체를 만드는 과정
# 필드(Field)와 메서드 (Method)
1. 필드 (Field)
: 클래스에 포함된 변수 (객체의 속성의 정의할 때 사용)
→ static 키워드가 함께 선언된 것 (클래스 변수)
→ static 키워드가 선언되지 않은것 (인스턴스 변수)
→ 메서드 내에 포함된 모든 변수 (지역 변수)
// 자바에서 클래스의 영역은 문서의 영역
// 용도와 상황, 위치 등에 따라 변수의 이름이 바뀜
class Example { // 클래스 영역
int instanceVariable; // 인스턴스 변수 → new 생성자() / 생성시점의 차이 (사용 가능 시점의 차이)
static int classVariable; // 클래스 변수, static(정적인)변수/공유변수 → 생성 공간의 차이 (용도의 차이)
void method() {
int localVariable; // 지역 변수, 가장 가까운{}블록 안에서만 유효
}
}
- 세가지 변수
: 클래스 변수
→ 공통된 저장공간을 공유
→ 한 클래스로부터 생성되는 모든 인스턴스가 특정한 값을 공유해야 하는 경우에 static 키워드 사용
*
static은 모든 클래스&인스턴스 변수에 영향을 미침
instance는 지정한 인스턴스 변수에만 영향을 미침
2. 메서드 (Method)
: 특정 작업을 수행하는 일련의 명령문들의 집합
- 메서드 시그니처
자바제어자 반환타입 메서드명 (매개 변수)
public static int add (int x, int y)
- 메서드 바디
public static int add(int x, int y) { // 메서드 시그니처
int result = x + y; // 메서드 바디
return result;
}
반환타입 : static int
매개변수 : int x, int y
만약 메서드의 반환타입이 void가 아닌 경우에는 메서드 바디({}) 안에 반드시 return 문이 존재해야 합니다. 리턴문은 작업을 수행한 결과값을 호출한 메서드로 전달합니다. 여기서 결과값은 반드시 반환타입과 일치하거나 적어도 자동 형변환이 가능한 것이어야 합니다.
void printHello() { // 반환타입이 void인 메서드
System.out.println("hello!");
}
반환타입
: void 매개변수 : 없음void = 반환 값이 없는 메서드
void가 있으면 어떤 문제를 해결하기 위한 로직만 돌아가고 그 결과는 다시 돌려주지 않음(return안함)void가 없으면 문제를 해결하고 그 결과값을 보여줌 (return함)
int getNumSeven() { // 매개변수가 없는 메서드
return 7;
}
반환타입 : int
매개변수 : 없음
매개변수가 없어서 해당 메서드가 호출되면 7을 반환
Double multiply(int x, double y) { // 매개변수가 있는 메서드
double result = x * y;
return result;
}
반환타입 : Double
매개변수 : int x, double y
int와 double을 연산하면 더 큰 타입인 double로 자동 형 변환이 이루어짐
- 메서드 호출
: 메서드도 클래스의 멤버
: 클래스 외부에서 메서드를 사용하기 위해서는 인스턴스를 생성해야 함
: . (포인트 연산자) 사용
메서드이름(매개변수1, 매개변수2, ...); // 메서드 호출방법. 매개 변수가 없을 수도 있음.
printHello(); // 위의 코드 예제 호출
getNumSeven();
multiply(4, 4.0);
(int x, double y)
(괄호 안에 넣는 값 : 인자)
(인자의 개수와 순서는 메서드를 만들 때 선언된 매개변수와 일치해야 함)
//출력값
hello!
7
16.0
- 메서드 오버로딩 (Method Overloading)
: 하나의 클래스 안에 같은 이름의 메서드를 여러개 정의 하는 것
: 장점
→ 하나의 메서드로 여러 경우의수를 해결할 수 있음
: 같은 메서드명을 사용한다고 해서 오버로딩이 되는 것은 아님
→ 같은 이름의 메서드 명 + 매개변수의 개수 or 타입이 다르게 정의 = 오버로딩
→ 반환타입이 다른것은 오버로딩에 영향을 주지 않음
*****
static이 있는것과 없는것을 이해하는게 힘들었음
인스턴스변수 에서 클래스변수 static과 인스턴스변수를 호출하는것은 가능하지만,
클래스변수에서 인스턴스변수를 호출하려면 객체를 생성해야함
void 유무?
void가 있으면 어떤 문제를 해결하기 위한 로직만 돌아가고 그 결과는 다시 돌려주지 않음(return안함)
void가 없으면 문제를 해결하고 그 결과값을 보여줌 (return함)
Tomorrow Chapter
# 생성자 (Constructor)
# 내부 클래스 (Inner Class)
↓ 이전 글 ↓
↓ 코트스테이츠 부트캠프 관련 글 한번에 보기 ↓