📅 2023-12-13, 5일차
클래스
설계도!
default 값
0 & false
- 자바 기본형타입의 디폴트 값 -> 0
- int의 디폴트값은 0
- boolean은 0 대신 false
null
- 자바 참조형타입의 디폴트 값 -> null
- '값이 비어있다'
- 0도 값이다!
💡 클라스 안에 필요한 데이터의 타입을 사용해서 변수선언하기뿐만 아니라 직접 값을 넣어 세팅할 수 있음
클래스의 구성 요소
field (필드)
- 속성(state, 상태, 단순 데이터)
- 쉽게 말해, 변수
- 명사
method (메소드)
- 기능(behavior, 행동, 실행 데이터)
- 쉽게 말해, 함수
- 동사
- 기본꼴
💡 변수개수와 함수개수 만드는데에는 제한이 없다
BUT 같은 클래스 안에 똑같은 이름의 duplicate(중복) 메소드는 만들 수 없다 (like 변수)
void hello() {
}
사용자정의 객체에서 field와 method를 구성하는 방법 :
public class Main {
public static void main(String[] args) {
사람 a = new 사람();
a.age = 33;
a.name = "김철수";
a.isMarried = true;
a.introduce();
}
}
class 사람 {
int age;
String name;
boolean isMarried;
void introduce() {
System.out.println("안녕, 나는 33살 기혼, 김철수야");
}
}
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 변수를 출력 할 수 있음
인자 & 매개변수
- 인자
- 인수, arguments
- 실행할 때 넘어오는 옵션 값
- 매개변수
매개변수는 무조건 순서대로 들어감. 이름 따라 가는 거 아님.
매개변수는 지역변수의 일종임.
초기화는 우리가 하는 게 아니고 인자가 함.
메소드 오버로딩
- 같은 이름의 메소드를 중복하여 정의하는 것
- 원래 자바에서는 한 클래스 내에 duplicate 메소드를 가질 수 없만,
- 매개변수 타입이 다르거나 또는 매개변수 갯수에 따라 메소드명을 중복 시킬 수 고 duplicate 메소드 취급하지 않음
- 왜? 메소드는 static void 합(int a, int b) 괄호끝까지 메소드명으로 취급함.
- 다형성 OOP의 특성중에 하나
오버로딩의 조건
- 메소드의 이름이 같아야함
- 매개변수의 개수 또는 타입이 달라야 함
- 매개변수의 개수와 타입은 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않음
인자와 매개변수를 사용하는 예시:
class Main {
public static void main(String[] args) {
계산기.합(10, 20);
계산기.합(30, 40);
계산기.합(0, 0);
}
}
class 계산기 {
static void 합(int a, int b) {
System.out.println(a + b);
}
}
변수의 종류
변수의 수명
- 모든 변수는 생명주기(life cycle)라는게 있음
- 변수는 함수가 실행 될 때 만들어지고, 함수가 끝날때 죽음
- 지역변수 : 지역공간 == 메서드 내부
- 지역변수는 ' { '가 시자되는 시점에 생성되며 ' } '로 끝나는 시점에 소멸
- 전역변수 : 전역공간 == 메서드 외구
- 전역변수는 지역변수보다 생명주기가 더 길다
- 매개변수 : 매개체
- 매개변수는 지역변수에 포함된다
변수의 스코프
- 변수 선언 후, 그 변수의 사용 범위
- 변수가 클래스 안에 선언 됐으면, 그 변수는 클래스 전체에서 사용할 수 있고 메소드 안에서도 사용할 수 있다
- 변수가 메소드 안에 있다면, 메소드 안에서만 활동 가능
- 변수가 if문 안에서 사용됐다면 그 변수는 if문의 스코프 안에서만 활동 가능
📢 강사님의 advice
- 새로운객체를 만들어서 접근하고있는지, 기존에 만든 변수를 활용해서 불러오는지 잘 구분해서 사용해야 함.
- 객체 그림 그려서 시각화해보기
- method명은 잘 짓자
- 개발자 설문조사 결과, 개발 할 때 제일 어려운건 변수명과 함수명 짓기라고 한다
- 반복에 의미가 있다 (반복숙달)
- 첫번째 봤을 때, 두번째 봤을 때, 세번 째 봤을 때 느낌이 다 다르다!
- 개념을 처음 읽어볼땐 모르겠지만, 설명을 듣거나 다른 자료를 찾아보고 다시 처음 개념자료를 다시 보면 이해가 안가던게 이제 보이기 시작한다.
- 원인과 결과
👩💻 TO DO
- 속성과 기능에 대한 강의영상 복습하기
- this 강의영상 복습하기 - 자바 기초수업때도 this 사용이 헷갈렸음..ㅠㅠ
- static 강의영상 복습하기 (10:00 부터 보기)
- 함수만들고 실행하는 방법 익숙해지자
- TCP School 참고해서 복습해보자
🤔 느낀점
- this는 아직도 조금 헷갈리지만 그래도 전보다 조금씩 이해가 되기 시작되는 것 같다. this 사용하면서 코드를 적는게 재밌다 - this 치고 쩜 찍는게 왜 재밌는지 생각해보았다. 그동안 헷갈려하던 부분이었었는데 제대로 사용하고 있다고 느껴져서 그런가보다. 😁
- this 뿐만 아니라 그동안 헷갈려하던 메서드, static, 매개변수가 오늘 강의에 다 나왔다!
- 강사님 말해주신대로 꾸준히 반복숙달해서, 나중에 나 스스로 제대로 알고 사용하게 된다면 코딩이 훨씬 재밌겠지? 퍼즐 맞추기같다.
- 변수에 생명주기가 있다는 것이 흥미롭다..