본문 바로가기
개발/자바

Java 객체지향

by mabyoungg 2023. 4. 29.

1)

클래스 정의: 객체를 정의

클래스 용도: 객체를 생성하는 데 사용

 

객체의 정의: 실제로 존재하는 것, 사물 or 개념

객체의 용도: 객체가 가지고 있는 속성과 기능에 따라 다름

 

객체: 모든 인스턴스를 대표하는 일반적인 용어

인스턴스: 특정 클래스로부터 생성된 객체

인스턴스화: 클래스 -> 인스턴스(객체)

 

객체의 구성요소

객체 = 속성(변수) - 기능(메서드)

 

2)

객체의 생성

클래스명 변수명;

변수명 = new 클래스명;

 

객체배열 == 참조변수 배열

여러 개의 객체를 담을 수 있는 배열

 

3)

선언 위치에 따른 변수의 종류

클래스 영역: 클래스 변수

클래스가 메모리에 올라갈 때 생성

객체 생성을 하지 않아도 생성하고 언제든지 사용 가능

접근 방법: 클래스명.클래스변수명

 

클래스 영역: 인스턴스 변수

객체가 생성될 때 인스턴스 변수 생성

접근 방법: 참조변수명.인스턴스변수명

 

메서드 영역: 지역 변수

메서드가 호출돼서 실행될 때 생성

메서드가 종료되면 자동으로 제거

 

4)

메서드

장점: 중복 코드 제거,. 관리 용이, 재사용 가능

작성: 반복적으로 수행되는 여러 문장을 메서드로 작성, 하나의 메서드는 한 가지 기능만 수행하도록 작성하는 게 좋음

*코드 중복을 하나의 묶음으로 만들어 코드의 가독성 및 효율을 높여줌

// 반환타입 메서드이름 (타입 변수명, 타입 변수명, ...)
//{
                  // 메서드가 호출되면 수행할 코드
//}
//void(반환타입): 메서드 수행 시 아무것도 반환하지 않을 때 사용
int add(int x, int y) {  
	int result = x + y;
	return result;
}

 

return

실행 중인 메서드를 종료하고 호출한 곳으로 돌아감.

반한타입이 void가 아닌 경우, 반드시 return문 필요

void는 컴파일러 자동으로 메서드 마지막에 return; 추가

 

호출 스택 (call stack)

메서드 수행에 필요한 메모리가 제공되는 공간, 메서드가 호출되면 호출 스택에 메모리가 할당, 종료되면 해제

 

5)

기본형 매개변수: 변수의 값을 읽기만 가능

참조형 매개변수: 변수의 값을 읽고 변경 가능

 

6)

static 메서드(클래스 메서드)

객체 생성 없이 '클래스이름.메서드이름()' 호출

인스턴스 멤버와 관련 없는 작업을 하는 메서드

메서드 내에서 인스턴스 사용 불가

객체로 생성된 참조변수로는 접근할 수 없다

 

인스턴스 메서드

인스턴스를 생성한 후 '참조변수.메서드이름()' 호출

인스턴스 멤버와 관련된 작업을 하는 메서드

메서드 내에서 인스턴스 변수 사용 가능

 

7)

오버로딩

한 클래스 안에 같은 이름의 메서드를 여러 개 정의

 

성립 조건

1. 메서드 이름이 같아야 한다.

2. 매개변수의 개수 또는 타입, 위치가 달라야 한다

3. 반환타입에는 영향을 받지 않는다.

*반환 타입이 다르다고 오버로딩이 성립되지는 않음

 

목적

매개변수 즉, 입력하는 값이 다르지만 같은 기능을 수행하는 경우가 많을 때 사용성 및 효율을 높이기 위해 사용

// int add(int a, int b) 주석하고 add(10, 20)하면 에러 발생. int, int는 (long, int) , (int, long) 2개 메서드 모두 가능하기 때문에
int add(int a, int b) {
        System.out.println("int add(int a, int b)");
        return a + b;
}

long add(long a, long b) {
    System.out.println("long add(long a, long b)");
    return a + b;
}

long add(long a, int b) {
        System.out.println("long add(long a, int b)");
        return a + b;
}

long add(int a, long b) {
    System.out.println("long add(int a, long b)");
    return a + b;
}

 

8)

생성자

인스턴스가 생성될 때마다 호출되는 인스턴스 초기화 메서드

 

생성 조건

이름이 클래스 이름과 같아야 한다

return 값이 없다

void는 붙이지 않는다

오버로딩 가능하다

*기본 생성자는 없고 오버로딩 생성자만 있을 경우 기본 생성자를 사용하려고 하면 에러 발생

class Test2 {
    boolean power; 
    int channel;  
    String color; 
    long price; 

    // 기본 생성자
    public Test2() {
        power = false;
        channel = 1;
    }

    // 오버로딩 생성자
    public Test2(String color, long price) {
        power = false;
        channel = 1;
        this.color = color;
        this.price = price;
    }
}

 

9)

this

인스턴스 자신을 가리키는 참조변수

인스턴스 메서드(생성자 포함)에서 사용 가능

지역 변수와 인스턴스 변수를 구별할 때 사용

 

this()

생성자에서 다른 생성자를 호출할 때 사용

this() 사용, 클래스명() 사용하면 에러 발생

다른 생성자 호출 시 첫 줄에서만 사용 가능

 

10)

변수 초기화

지역 변수는 수동으로 초기화

지역 변수가 동작하는 스택 메모리는 재사용이 빈번, 매번 초기화하면 성능이 떨어진다. 그래서 그냥 해당 메모리에 있는 값으로 덮어 씌움. 해당 주소에 어떠한 값이 있는지 모르기 때문에 개발자에게 수동으로 초기화 요구

C언어에서는 garbage value라고 부름

멤버변수 (인스턴수 변수, 클래스 변수)는 자동으로 초기화

 

멤버 변수의 초기화

클래스 변수: 클래스가 처음 로딩될 때 단 한번 초기화

인스턴스 변수: 인스턴스가 생성될 때마다 초기화

 

초기화 방법

명시적 초기화: =

클래스 초기화 블럭: static { }, 인스턴스 초기화 블럭 { } * 인스턴스 초기화 블럭은 거의 사용하지 않음

생성자 초기화

 

초기화 순서

1. 클래스 초기화 -> 2. 인스턴스 초기화

1. 자동 2. 간단 3. 복잡

1. 0   2. =  3. static {], {}, 생성자

'개발 > 자바' 카테고리의 다른 글

쉽게 배우는 자바2 메모  (0) 2023.06.01
쉽게 배우는 자바1 메모  (0) 2023.05.30
Java 배열  (0) 2023.04.27
Java 조건문과 반복문  (0) 2023.04.26
Java 연산자  (0) 2023.04.25