2023-12-13 (5일차) - field, method, this, static, 매개변수

·2023년 12월 13일

📅 2023-12-13, 5일차

클래스

설계도!

default 값

0 & false

  • 자바 기본형타입의 디폴트 값 -> 0
    • int의 디폴트값은 0
    • boolean은 0 대신 false

null

  • 자바 참조형타입의 디폴트 값 -> null
    • String의 디폴트값은 null
  • '값이 비어있다'
  • 0도 값이다!

💡 클라스 안에 필요한 데이터의 타입을 사용해서 변수선언하기뿐만 아니라 직접 값을 넣어 세팅할 수 있음

클래스의 구성 요소

field (필드)

  • 속성(state, 상태, 단순 데이터)
  • 쉽게 말해, 변수
  • 명사

method (메소드)

  • 기능(behavior, 행동, 실행 데이터)
  • 쉽게 말해, 함수
  • 동사
  • 기본꼴

💡 변수개수와 함수개수 만드는데에는 제한이 없다
BUT 같은 클래스 안에 똑같은 이름의 duplicate(중복) 메소드는 만들 수 없다 (like 변수)

//메소드 기본꼴 
    void hello() {
    
    }

사용자정의 객체에서 field와 method를 구성하는 방법 :

// 1.객체생성, 2.클래스생성, 3.속성생성, 4.공간생성, 5.함수생성, 6.실행하기

public class Main {
  public static void main(String[] args) {

    사람 a = new 사람(); // 1.객체생성
    a.age = 33;
    a.name = "김철수";
    a.isMarried = true;
    // 4.공간생성

    a.introduce();
    // 6.실행하기

  }
}

class 사람 { // 2.클래스생성
  int age;
  String name;
  boolean isMarried;
  // 3.여기까진 속성(field)

  void introduce() {
    System.out.println("안녕, 나는 33살 기혼, 김철수야");
    // 5.여기까진 함수(method)

  }
}

this

  • 메서드 내부에 있는 정보가 아닌, 클래스 내부에 있는 정보를 빼오려면 this를 사용해야한다.
  • this.name
  • 메서드 안에서 같은 객체 내부의 필드에 접근해서 값을 가져오라는 뜻
  • "너(this)의 메서드 안에서 같은 객체 내부의 필드에 접근해서 값을 가져와"

객체를 사용하는 이유?

  • 자바는 객체지향언어이기 때문이다.
  • 객체화 안해도 프로그래밍은 가능하다.
  • 그러나, 그러면 자바를 하는 이유가 없음.
    SO, 객체 -> 클라스 & 메소드에 대한 시각화를 할 줄 알아야함!

그럼 Main 클래스는 도데체 뭔가?

  • Main클래스는 진입점 역할
  • main 메서드는 이름이 바뀌면 안됨
    • 프로그램 실행을 시작하는 기준

인스턴스

객체를 만들고 메서드를 실행하는 과정

    자동차 a자동차 = new 자동차();
	a자동차.달리다();
  • 인스턴스변수를 사용한 메서드가 인스턴스메서드.

static

static 메서드는 객체화 없이 클래스한테 바로 명령 가능

Static의 특징

  • 프로그램이 시작하면 고정된 공간이 생겨서 프로그램이 끝날 때까지 박혀있다.
    • 단점: Static을 남발하면 안 되는 이유는 효율적인 메모리 관리가 안 된다.
    • 장점: 객체화를 하지 않아도 바로 실행이 가능해서 실행속도가 인스턴스메서드보다 빠름.

근데 자바에선 STATIC을 잘 쓰진 않는다고하던데...

왜?

자바는 객체지향언어이기 때문에 (OOP)

static은 객체없이 사용하는거니까..
static 이 남발되면 자바의 본질을 위협.
개발자는 메모리 영역이 중요함.

그래도 static을 꼭 써야 할 상황도 있다고 한다.

static 변수

  • static은 static끼리 통신이 가능함
  • static 메소드 안에있는 출력문이 메소드밖에있는 static 변수를 출력 할 수 있음
    • static int a = 10;

인자 & 매개변수

  • 인자
    • 인수, arguments
    • 실행할 때 넘어오는 옵션 값
  • 매개변수
    • parameter
    • 실행하려고 받는 변수

매개변수는 무조건 순서대로 들어감. 이름 따라 가는 거 아님.
매개변수는 지역변수의 일종임.
초기화는 우리가 하는 게 아니고 인자가 함.

메소드 오버로딩

  • 같은 이름의 메소드를 중복하여 정의하는 것
  • 원래 자바에서는 한 클래스 내에 duplicate 메소드를 가질 수 없만,
    • 매개변수 타입이 다르거나 또는 매개변수 갯수에 따라 메소드명을 중복 시킬 수 고 duplicate 메소드 취급하지 않음
      • 왜? 메소드는 static void 합(int a, int b) 괄호끝까지 메소드명으로 취급함.
  • 다형성 OOP의 특성중에 하나

오버로딩의 조건

  1. 메소드의 이름이 같아야함
  2. 매개변수의 개수 또는 타입이 달라야 함
  3. 매개변수의 개수와 타입은 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않음

인자와 매개변수를 사용하는 예시:

class Main {
  public static void main(String[] args) {
    계산기.(10, 20); // 30   <- 인자, 인수, arguments
    계산기.(30, 40); // 70 // 괄호안에있는 것은 내 요구사항
    계산기.(0, 0);

  }
}

class 계산기 {

  static void(int a, int b) {  // <- 매개변수, parameter

    System.out.println(a + b);

  }

}

변수의 종류

변수의 수명

  • 모든 변수는 생명주기(life cycle)라는게 있음
    • 변수가 생성되고 죽는 것
  • 변수는 함수가 실행 될 때 만들어지고, 함수가 끝날때 죽음
  • 지역변수 : 지역공간 == 메서드 내부
    - 지역변수는 ' { '가 시자되는 시점에 생성되며 ' } '로 끝나는 시점에 소멸
  • 전역변수 : 전역공간 == 메서드 외구
    - 전역변수는 지역변수보다 생명주기가 더 길다
  • 매개변수 : 매개체
    - 매개변수는 지역변수에 포함된다

변수의 스코프

  • 변수 선언 후, 그 변수의 사용 범위
    • 변수가 클래스 안에 선언 됐으면, 그 변수는 클래스 전체에서 사용할 수 있고 메소드 안에서도 사용할 수 있다
    • 변수가 메소드 안에 있다면, 메소드 안에서만 활동 가능
    • 변수가 if문 안에서 사용됐다면 그 변수는 if문의 스코프 안에서만 활동 가능

📢 강사님의 advice

  • 새로운객체를 만들어서 접근하고있는지, 기존에 만든 변수를 활용해서 불러오는지 잘 구분해서 사용해야 함.
  • 객체 그림 그려서 시각화해보기
  • method명은 잘 짓자
    • method명은 동사로 짓자
  • 개발자 설문조사 결과, 개발 할 때 제일 어려운건 변수명과 함수명 짓기라고 한다
  • 반복에 의미가 있다 (반복숙달)
    • 첫번째 봤을 때, 두번째 봤을 때, 세번 째 봤을 때 느낌이 다 다르다!
  • 개념을 처음 읽어볼땐 모르겠지만, 설명을 듣거나 다른 자료를 찾아보고 다시 처음 개념자료를 다시 보면 이해가 안가던게 이제 보이기 시작한다.
  • 원인과 결과
    • 왜? 되는지 알아야함

👩‍💻 TO DO

  • 속성과 기능에 대한 강의영상 복습하기
  • this 강의영상 복습하기 - 자바 기초수업때도 this 사용이 헷갈렸음..ㅠㅠ
  • static 강의영상 복습하기 (10:00 부터 보기)
  • 함수만들고 실행하는 방법 익숙해지자
  • TCP School 참고해서 복습해보자

🤔 느낀점

  • this는 아직도 조금 헷갈리지만 그래도 전보다 조금씩 이해가 되기 시작되는 것 같다. this 사용하면서 코드를 적는게 재밌다 - this 치고 쩜 찍는게 왜 재밌는지 생각해보았다. 그동안 헷갈려하던 부분이었었는데 제대로 사용하고 있다고 느껴져서 그런가보다. 😁
  • this 뿐만 아니라 그동안 헷갈려하던 메서드, static, 매개변수가 오늘 강의에 다 나왔다!
  • 강사님 말해주신대로 꾸준히 반복숙달해서, 나중에 나 스스로 제대로 알고 사용하게 된다면 코딩이 훨씬 재밌겠지? 퍼즐 맞추기같다.
  • 변수에 생명주기가 있다는 것이 흥미롭다..
profile
hello world

0개의 댓글