SEB_BE_43 / 22.12.27 회고

rse·2022년 12월 28일
0

코드스테이츠_BE_43

목록 보기
7/65

기억보다는 기록으로.

오늘 핵심

  • 객체지향 프로그래밍 기초
  • class
  • 객체
  • 필드
  • 메서드

객체지향 프로그래밍이란?

Object - Oriented Programming System -> OOP

객체지향 프로그래밍 특성?

객체 지향 원리를 도입한다.
코드를 객체 지향적으로 설계한다. -> 코드들이
코드들의 연관도 -> 결합도 라고 한다.
객체지향 프로그래밍 -> 코드들이 변화와 확장에 유연하게 함
결합도를 낮춤

객체란?

무언가에 대한 정보와 동작을 묶어 놓은 것

class는 객체를 만들기 위해 존재.
붕어빵 틀이라고 생각하면 좋다.

Class는 그 자체가 타입이 된다.

원래 인스턴스를 생성하려면
(타입)String a = new (타입)String(); 으로 생성.
Class를 참조하는 인스턴스를 생성하려면
(클래스 이름)StaticExample a = new (클래스 이름)StaticExample();
이렇게 작성하면 된다.

필드

class에 포함된 변수 & 속성
변수 == 필드
1. 클래스 변수
2. 인스턴스 변수
3. 지역 변수

필드에 포함된 변수는 클래스와 인스턴스
1. 클래스 변수
static이 앞에 붙는다.
공통된 저장공간 공유.
클래스 변수는 인스턴스 변수와 달리 인스턴스를 따로 생성하지 않고도 언제라도 클래스명.클래스변수명 을 통해 사용이 가능.
사진으로 보면, Example.classVariable 로 클래스 변수를 사용할 수 있다.


  1. 인스턴스 변수
    각각의 고유한 특성을 지닌 변수로 new 생성자() 를 통해 인스턴스가 만들어질 때 생성된다.
    class를 통해 만들어진 인스턴스는 힙 메모리의 독립적인 공간에 저장되고, 동일한 클래스로부터 생성되었지만 객체의 고유한 개별성을 가진다.
    인스턴스 변수는 그 고유한 특성을 정의하기 위한 용도로 사용된다.
    사람으로 생각하면 MBTI, 이름, 나이

  1. 지역 변수
    메서드 안에 포함된 모든 변수.
    메서드 내에서 밖에 사용 못함.
    스택 메모리에 저장되어 메서드가 종료되는 것과 동시에 함께 소멸되어 더이상 사용할 수 없게 됨.
    또한 힙 메모리에 저장되는 필드 변수는 객체가 없어지지 않는 한 절대로 삭제 안됨.
    스택 메모리에 저장되는 지역변수는 한동안 사용되지 않는 경우 가상 머신에 의해 자동으로 삭제된다.

필드와 지역 변수의 중요한 차이점

초기값

필드는 따로 초기화를 해주지 않아도 강제로 초기화가 되는 반면
지역은 초기화를 해주지 않으면 값을 출력할 때 오류가 발생함.

필드 변수는 힙 메모리에 저장되는데 힙 메모리는 빈 공간이 저장될 수 없기 때문에 이곳에 저장되는 필드는 강제로 초기화가 된다.

지역변수는 스택 메모리에 저장되는데 스택 메모리는 강제로 초기화가 되지 않는다.


static

static 키워드를 사용하면 모든 인스턴스에 공통적으로 적용되는 값을 공유할 수 있다.

한마디로 인스턴스는 저장되는 곳이 달라서 Test1이 100을 넣고 Test2가 1000을 넣으면 서로 다른 곳에 저장이 되지만,
클래스는 저장되는 곳이 같아서 Test1이 10을 넣으면 10이 저장됬다가 Test2가 50을 넣으면 50이 최종 값이 되는 것이다.



위 코드를 보면 인스턴스 메서드에는 인스터스 변수와 클래스 변수가 에러가 뜨지 않지만
클래스 메서드에서는 인스턴스 변수가 에러가 뜬다.

이유는 클래스 메서드와 인스턴스 메서드가 생성되는 시점이 다르기 때문인데 아래 그림 참고.

그림을 보면 알 수 있듯이 클래스 메서드는 이미 컴파일 중일 때 생성이 완료된 상태이다. 코드를 실행시킬 때에는 이미 만들어져 있는 상태라는 뜻이다.
그런데 인스턴스 메서드, 변수는 코드를 실행시키면 위에서 내려오면서 인스턴스가 만들어져야 사용할 수 있는 메서드이다.
그래서 인스턴스가 생성되기 전에 인스턴스를 작성하면 빨간줄이 뜨게된다.

그리고 static 메서드에서 인스턴스를 사용하지 못하는 이유는 컴퓨터는 인스턴스가 생성이 됬는지 안됬는지 모르기 때문에 처음부터 막아놓은 것이다.


메서드(Method)

클래스의 기능을 담당한다.

말 그대로 메서드 안에서는 출력을 한다던가, 계산을 한다던가, return을 해준다던가...등 무언가를 행동하는 것이 메서드다.

메서드는

public String(타입) a (매개변수) {
	실행할 코드 
    }; 

또는

String(타입) a (매개변수) {
  실행코드
  };

이렇게 작성한다.

타입이 void가 아닌경우에는 실행할 코드 안에 무조건 return문을 작성해야 한다.
void는 반환이 안되는 타입으로, 그냥 선언만 해주는..? 그런 친구.


메서드 오버로딩

같은 메서드로 다른 값을 출력할 수 있는 메서드.

아까 같은 메서드일 경우 만약 a에 계산이 싶어진다면?
그럼 메서드를 또 작성해야할까?
그런식으로 메서드를 작성하다보면 너무 많은 메서드를 작성해야 할 것이다.

그럴 때 메서드 오버로딩을 사용한다.

이런식으로 사용할 수 있다.

오버로딩을 하려면 전제조건이 있다.

  • 같은 이름의 메서드 && 매개변수의 타입 || 갯수 가 달라야한다.

위에서 말했듯이 오버로딩을 사용 할 경우 메서드를 재사용 할 수 있다.

profile
기록을 합시다

0개의 댓글