The A :

728x90
반응형

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는 지정한 인스턴스 변수에만 영향을 미침

public class CarTest {
    public static void main(String[] args) {
        Car car1 = new Car();
        Car car2 = new Car();
        car1.instan = "인스턴스 변수";
        System.out.println(car1.instan);
        System.out.println(car2.instan);
    }
}
class Car {
    public String instan = "나는 인스턴스 변수";
    // public static String inst = "";

    public static String clas = "나는 클래스 변수";
 
    public static void method() { // class method
        System.out.println(inst); // instance 변수로 접근 불가능
        System.out.println(clas); // class변수로 접근 가능
    }

    public void instance() {
        System.out.println(instan);
        System.out.println(clas);
    }
}

 

 

 

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)

 : 하나의 클래스 안에 같은 이름의 메서드를 여러개 정의 하는 것

 : 장점

 → 하나의 메서드로 여러 경우의수를 해결할 수 있음 

public class CarTest {
    public static void main(String[] args) {
        Shape s = new Shape(); // 객체 생성

        s.area(); // 메서드 호출
        s.area(5);
        s.area(10, 10);
        s.area(6.0, 12.0);
       
    }
}

class Shape {
    public void area() { //메서드 오버로딩, 같은 이름의 메서드 4개(다른 매개변수)
        System.out.println("넓이");
    }
    public void area(int r) {
        System.out.println("원의 넓이 = " + 3.14 * r * r);
    }
    public void area(int w, int l) {
        System.out.println("직사각형의 넓이 = " + w * l);
    }
    public void area(double b, double h) {
        System.out.println("삼각형의 넓이 = " + 0.5 *b * h);
    }
}

// 출력값
// 넓이
// 원의 넓이 = 78.5
// 직사각형의 넓이 = 100
// 삼각형의 넓이 = 36.0

 : 같은 메서드명을 사용한다고 해서 오버로딩이 되는 것은 아님

 → 같은 이름의 메서드 명 + 매개변수의 개수 or 타입이 다르게 정의 = 오버로딩

 → 반환타입이 다른것은 오버로딩에 영향을 주지 않음

 

 

*****

static이 있는것과 없는것을 이해하는게 힘들었음

인스턴스변수 에서 클래스변수 static과 인스턴스변수를 호출하는것은 가능하지만,

클래스변수에서 인스턴스변수를 호출하려면 객체를 생성해야함

 

void 유무?

void가 있으면 어떤 문제를 해결하기 위한 로직만 돌아가고 그 결과는 다시 돌려주지 않음(return안함)

void가 없으면 문제를 해결하고 그 결과값을 보여줌 (return함)

 

 

 

 

Tomorrow Chapter

# 생성자 (Constructor)

# 내부 클래스 (Inner Class)

 

 

 


 

 

↓ 이전 글 ↓

 

[코드스테이츠] 04_11_TIL : JAVA 다섯번째 _ 배열

Today I Lean JAVA 다섯번째 _ 배열 벌써 자바기초 마지막이라니!! 아직 아무것도 이해하지 못한것 같은데 앞으로 내가 잘 할 수 있을까?? 블로깅도 제대로 못한것 같고 아무것도 못한것 같은데 벌써

theflower01.tistory.com

 

↓ 코트스테이츠 부트캠프 관련 글 한번에 보기 ↓

 

'IT/코드스테이츠 부트캠프' 카테고리의 글 목록

Flower, Plant, Study

theflower01.tistory.com

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading