또 한주가 지나가고 있다!
그래도 이번 주는 뭔가 알차고 즐겁게 보낸 느낌이다.
물론 새로운 맛집을 알게 되어 만족스러운 점심을 먹어서 더 기분이 좋은 것 같기도 하고!!!!
!이번주 배운 내용!
멤버변수
변수가 너무너무너무 헷갈렸다.
멤버변수, 클래스변수, 인스턴스변수, 지역변수, 객체변수...
뭐야?!?!?!?
그래서 따로 포스팅해서 정리해두었다 후후(근데 아직 조금 헷갈림)
멤버변수: 클래스 영역에서 선언한 변수
- 클래스변수: 클래스 영역 내부에 선언되고 다른 클래스에서도 호출 가능/변수 앞에 static 키워드 필요. 하나의 저장공간을 공유하기 때문에 항상 공통 값을 가지고 있다.
- 인스턴스변수: 클래스 영역 내부에 선언되고 같은 클래스 내부에서 호출 가능. 생성될 때마다 서로 다른 값을 가진다.
지역변수: 클래스 외부 영역. 메소드나 생성자 내부에서 선언한 변수
call by value
값 복사해서 전달하는 방식이다.
기본형 - 실제 값 복사 전달(메소드 매개변수값이 변경되면 원래 전달한 인수값은 변경되지 않는다)
참조형 - 주소 값 복사 전달(같은 객체 동일 참조./같은 객체 내부 값이 변경되면 영향을 받아 같이 변경됨)
A a1 = new A();
A a2 = new A();
a2 = a1;
a1.id = 3;
System.out.println(a1.id);
System.out.println(a2.id);
출력하면 값이 얼마 나올까?
처음 봤을 때 당연히 a1만 3이지~! 했는데 둘 다 3으로 출력됐다.
알고 보니 참조형이라 주소 값을 공유해서 값이 같이 변경되었던 것!!!!!!!!!!!
static메소드
- 객체 생성 이전 메모리 할당
- 객체 생성 이전 같이 메모리 할당 변수만 사용 가능=static 변수만 사용 가능
생성자
- 클래스 내부 선언 구성요소
- constructor - 객체 생성 호출. new키워드 뒤에서 호출된다.
- 생성자는 클래스명과 같다.
- 자바의 모든 클래스에는 정의하지 않아도 기본 생성자가 자동으로 정의된다. 클래스명(){}
- 객체 생성 변수값 초기화 문장 정의가 가능함.
- 사용자 생성자 정의하면 자동 정의 생성자는 없어진다.
- 1개 클래스에 여러 개 생성자 정의. 매개변수 리스트 다르게 정의해야 한다.
Employee em1 = new Employee();
클래스명 객체주소참조변수명 = 객체생성연산자 생성자호출
- stack영역에 e1변수 할당(가진 값은 null)
- new키워드 실행되면 heap영역에 Employee복사본을 만든다.(변수+메소드 복사 할당)-(주소 1000번지라고 가정)
- Employee() 정의 내용 실행
- 사용자 생성자 정의하면 자동 생성자는 사라진다.
- =(대입 연산자) 실행 ⇒ 1000번지 주소가 e1변수값으로 변경됨. e1 = 1000
this
⇒ 현재 자신의 객체를 의미하는 자바 키워드!!!
- 매개변수/지역변수 이름이 객체변수의 이름과 같다면 this를 사용해 구분한다.
매개변수명이 num인 경우 this.num = num(매개변수) ⇒ 구분 의미를 명확하게 하기 위해서 - this([매개변수]) ⇒반복 정의하지 않고 재사용 가능하다.
(생성자 내부에서 사용. 생성자 내부에서 호출 시 첫 문장에 꼭!!! 써줘야 함.)
super
=> 상위클래스 객체를 의미하는 키워드
- 상속받은 후 부모, 자식클래스에 같은 이름을 가진 변수가 존재할 때 부모 클래스 상속 변수이다. super.상속변수명
- 자식클래스 변수를 우선 사용~~(this)~~
- 단, private변수인 경우 super붙일 수 없다.
- super.상속메소드명 ⇒ 오버라이딩 하위 메소드말고 상위 메소드 호출&사용
- super() - 부모 기본 생성자 호출. 첫 문장 자동 포함
- super(매개변수) - 부모 매개변수 정의 생성자 호출. 첫 문장 명시 문장 작성
- this() - 자신의 다른 생성자 호출. 생성자 첫문장
- super(), this()는 1개 생성자 내부에서 동시에 선언 불가능(둘 다 첫 문장이어야 하니까)
상속
is a 관계 ⇒ 상속(extends)
학생은 사람"이다" => is a 관계
class 학생 extends 사람
has a 관계 ⇒ 객체생성(new -/ car.a ;)
운전자는 자동차"이다" => has a 관계
자동차 car = new 자동차();
car.drive();
package
여러 개의 클래스 모음으로 폴더 형태!
유사한 성격의 클래스를 분류해서 사용할 수 있다.
(패키지)
board ⇒ 게시물 연관 클래스들
product⇒ 상품 관리 연관 클래스들
import



import끝!!(ctrl + shift + O 눌러도 나온다)

뒤에 Date를 *로 바꿔주면 Util 패키지 모두 사용할 수 있다!
final
| final변수 | 변수값 수정 불가능 => 상수 |
| final메소드 | 메소드 구현부 수정 불가능 (= 메소드 overriding 불가능) |
| final클래스 | 클래스 수정 불가능. 상속 후에 자식 클래스에서 모든 메소드 overriding불가능. final메소드는 final키워드 붙은 메소드만 오버라이딩 불가인데 클래스 앞에 final을 붙이면 아예 모든 메소드 불가. 그냥 상속 자체가 불가능함. (=모든 메소드에 final선언한것과 동일한 의미) 객체 생성으로만 사용 가능. |
형변환
class A{}
class B extends A{}
class c extends A{}
class D extends C{}
class F{}
---------------------------
A a1 = new A(); //형변환 불필요
A a2 = new B(); //자동형변환 가능
A a3 = new C(); //자동형변환 가능
A a4 = new D(); //자동형변환 가능
A a5 = new F(); //자동형변환 error(상속x라서)
B b1 = new C(); //자동형변환 error(상속x라서)
B b2 = new D(); //자동형변환 error(상속x라서)
B b3 = new A(); //자동형변환 error(부모-자식 변환X)
C c1 = new D(); //자동형변환 가능
C c2 = new C(); //형변환 불필요
다 이해했다고 생각했는데 막상 해보니까 50%만 알고 있었다...ㅠㅠ
과제도 풀긴 푸는데 제대로 내용 정리가 되어있지 않으니 자꾸 중간에 막힘-_-
그래도 아주 중요한 개념은 확실히 알게 됐다!
m과 c처럼 서로 다른 객체를 비교할 때 자꾸 같은 글자임에도 불구하고 false가 리턴됐다.
class CellPhone{
String m;
int num;
CellPhone(String model) {
this.model = model;
}
}
main(){
CellPhone c = new CellPhone("java");
}
if(m.equalsIgnoreCase(String.valueOf(c))){.....}
이렇게 조건을 주었는데 뭐가 문제일까 한참 고민하다 해답을 얻었다.
if(m.equalsIgnoreCase(String.valueOf(c.m))){.....}
...ㅠㅠㅠㅠㅠㅠㅠㅠㅠ
m은 변수고 c는 객체 자체라서 변수 m의 내용과 객체 c의 내용 전체를 비교하고 있었던 것.
어떤 내용을 비교해야 하는지 정확하게 c.m이라고 해줘야 true가 리턴된다!!!!!!
(북북북 문제를 더 뜯어봐야겠다!!!)
객체..........더 공부해야지...^_ㅠ
——————————————————————————
* 유데미 바로가기 : https://bit.ly/3V220ri
* STARTERS 취업 부트캠프 공식 블로그 보러가기 : https://blog.naver.com/udemy-wjtb
본 후기는 유데미-웅진씽크빅 취업 부트캠프 3기 백엔드 과정 학습 일지 리뷰로 작성되었습니다.
'웅진씽크빅 스타터스 부트캠프 > 교육일지' 카테고리의 다른 글
| 유데미 스타터스 취업 부트캠프 3기 - 백엔드 6주차 학습 일지 (0) | 2023.01.01 |
|---|---|
| 유데미 스타터스 취업 부트캠프 3기 - 백엔드 5주차 학습 일지 (0) | 2022.12.25 |
| 유데미 스타터스 취업 부트캠프 3기 - 백엔드 3주차 학습 일지 (0) | 2022.12.09 |
| 유데미 스타터스 취업 부트캠프 3기 - 백엔드 2주차 학습 일지 (0) | 2022.11.28 |
| 유데미 스타터스 취업 부트캠프 3기 - 백엔드 1주차 학습 일지 (0) | 2022.11.26 |