this : 현재 객체를 의미
- 클래스 변수 public String name; 선언해준 뒤
- 클래스 함수 introduce( ){ } 안에 String name이라는 변수 사용해보기
- 멤버 변수 String name은 빨간 테두리 안에서 어디든지 갈 수 있고, 다 돌아다니는데
- 멤버 함수 introduce( ) 안에 똑같은 String name을 썼네?
> 근데 작동되네? why?
> 다른 공간이라서 그렇다. 넹?
> 파란색은 지역변수 -
> 빨간색은 멤버 변수 -
> 클래스 변수 - 멤버 변수는heap메모리에 name이라는 애로 존재
> 빨간색 변수 - 지역변수는 stack메모리에 name이라는 애로 존재
> 별개의 영역에 존재하기 때문에 전혀 다른 것이다. 괜찮다!
this
> 현재 해당 메소드가 속해있는 객체를 가리킨다.
> this생략이 가능하지만
> 지역변수와 인스턴스 변수 동시에 존재하면 지역변수가 우선순위가 더 높다.
> this를 사용한 16번Line –에서 지금 name 은 9번 Line의 name을 가리킨다.
> this 자체가 현재 객체를 가리키는 것이므로!
> this 점(.) 하는 순간 객체를 가리키는 것으로 객체의 변수/함수 이런 식으로 가리킨다!
> this를 삭제한 16번Line –에서 지금 name 은 15번 Line의 name을 가리킨다.
- this를 붙여주는 것이 기본이고
- 중복된 이름이 없다면 생략 가능 되긴하는데 안 되는 것이라고 생각하자
- 마치 클래스 이름을 대문자로 시작해야 되지만 안 해도 되는 것처럼!!
---
Q. this가 현재 객체?
- 자기자신(== 객체)
- 철수야, 주문받아~~~ 명령하면 하는 이 동작은 메소드
- 객체야, 메소드실행해~
- 메소드 안의 this는? (주문받아 메서드 안에 this가 포함되어있으면 )
- 철수가 해야 하는 동작 - 즉, 자기 자신이 해야 하는 동작을 의미
- 메서드라는 것은 – 객체가 실행하는 것이므로
- 객체에 종속되어있는 것이므로
- 메소드 안에 this 가 있다면 현재 객체를 의미하는 것
- 현재 객체라는 의미는 = 자기 자신 현재 그 메서드를 실행하는 자기 자신을 의미!
객체 배열
실습 시작
1. 세팅
- person.main 패키지에 PersonArrayMain 클래스 추가
2. 개념 세팅
- 배열 : 여러 개의 데이터 관리하려고 등장 ( 같은 타입 )
- 우리 반 30명 학생의 시험 점수( int로 가능 )
- 우리 반 30명 학생의 정보( 이름, 나이)를 관리하고 싶다
- 배열로 불가능(int30칸 String30칸 해서 매칭 시켜서 관리할 수도 있겠지만.. no! - 2개 별개의 데이터이다.
- 구조체(java에는 없음) : 여러 개의 데이터 관리 등장 ( 타입 상관 X )
- 기존의 구조체는 가지고 있는 데이터에 하나하나 접근해서 출력하던지 사용했어야 했다.
- C의 구조체 단점을 보완-발전시킨 java에서 클래스 등장! ( data + method )
- 클래스 : 여러 개의 데이터 + 메소드
- 구조체의 데이터에 +기능!을 추가한 클래스 등장 ( 기능 == 동작 == 메소드)
- 따라서 여러 개의 데이터 타입을 관리할 수 있고 기능도 사용할 수 있다.
- - 객체 배열 : 여러 개의 객체를 관리하려고 등장( 같은 타입 )
3. 객체 배열 만들어 보기
1. 객체 만들기
- Person p1 = new Person();
- Person p2 = new Person();
2. 이름 대입 ( . name = " " ) 해주고 introduce( ); 자기소개해주기
3. 객체 배열 만들기 ( 5개의 Person타입 객체를 관리할 예정 )
- Person[] pArray = new Person[5];
- Person객체를 관리할 5칸의 공간을 생성해서 -
- 이 공간의 주소 값을 저장할 Person 배열 타입 변수 pArray에 주수 값 저장
- pArray[0] = new Person(); ---
- Person 객체를 생성해서 - Person 타입 배열 저장 공간의 0번째 칸에 할당
이 부분 반복문으로 수정 가능하다== 훨씬 편하게 관리할 수 있다!
+@ for 문 i < 5; 해주는 부분
- 조건을 왜 < 5라고 하는지?
- 5개 사용할 거라는 가독성 때문에
- pArray.length = 5라는 것과 일치하기 때문에~
객체 배열 만드는 것은
- int 배열 만드는 거랑 전~혀 다를 것이 없다
- 다만 데이터 타입이 int가 아닌 내가 만든 클래스 타입이 온다는 점만 다르다~
배웠던 다차원 배열이랑 다를 것이 없다!
다차원 배열할 때는
- 각 칸에는 어딘가에 존재하는 배열이 들어있었다.
객체 배열에서
- 각 칸에는 어딘가에 존재하는 Person 객체가 들어있다~ ( +@ 배열도 객체였다! )
객체 배열 끝!
맥도날드 실습 시작!
- 배운 내용 실습하면서 ( 객체 생성, 객체로 메소드 호출, this )
- 인자 값을 받는 메소드 추가로 배워보기
1. 기본 세팅
- macdonald.main 패키지 – RunMcDonald 클래스 생성
- macdonald.emp 패키지 - 직원 클래스 < 카운터, 주방, 배달 > 3개 클래스 생성
- 카운터 직원 데이터와 메서드(기능) 입력
- 주방 직원 데이터와 메소드 입력
- 배달 직원 데이터와 메소드 입력
2. 객체 만들기
- macdonald.main 패키지 - RunMcDonald 클래스에서 -
3. 주문 -> 요리 -> 배달 프로세스 만들기
4. 메소드 수정 – 카운터 직원 클래스의 order( ) 메소드, calc() 메소드
- 사용자한테 입력받은 메뉴 만드는 것으로 수정
- 사용자한테 입력받은 돈으로 받은 것으로 수정
+@ 스캐너 도구 생성 부분을 필드 부분에 하나만 써주기
> 메서드 내에서 만든 도구 사용 X, 필드에 있는 도구 사용 –
> 필드에 있는 sc변수를 사용해서 하려면 this.sc.nextLine() 처럼 사용하는 것이 정석이지만
> 누가 봐도 클래스 변수 인애들- 딱 봐도 지역변수로 안 만든다 판단되는 애들은 -
> this 생략해도 괜찮다. sc.nextLine() 해도 괜찮다.
5. 메소드 수정 2탄 - 카운터 직원 클래스 order( ) 메소드의 리턴 값 추가
- CounterEmp 클래스의 order( ) 메소드 - 리턴 값 주도록 추가해주자.
- 입력받은 메뉴를 리턴하도록 해주자
- public String order() { return ham; }
+@ return ham;
- 리턴해주면 햄버거 이름 “상하이” 문자열만 주는 것이다.
- 데이터만 주는 것이다. - 그릇의 이름인 ham을 리턴해주는 것이 아니다!
- ham이라는 변수가 유지되는 것이 아니다!
6. counter01.order( ); 메소드 출력 Test
- 이렇게 하면 메인 메소드에 counter01.order( ); 메소드는
- 사용자가 입력한 햄버거의 이름을 반환해준다.
7. String ham 변수에 담아주자
- counter1.order( ) 메소드의 결과를 담을 String 타입 변수 ham을 만들어서 담아주자
- couner1.order(); 의 리턴 값은 == "상하이"
- 내가 입력한 문자열만 반환해준다. 뒤에 있는 " 주문받았습니다~ " 는 전달 X
8. CookEmp 클래스 – cook( ) 메소드 수정
- 현재 cook()는 입력받는 값, 반환하는 값이 없다.
- 입력받는 값 - 추가해 주자
- main메소드에서 cook( ) 인자 값 추가
9. RiderEmp 클래스 – delivery () 메소드 수정
- 똑같은 단계로 진행~
- 입력받는 값 추가해주고 ( String ham )
- main 메소드에서 delivery( ham );
10. 출력 Test
- 카운터 객체 counter1 이 고객에게 직접 입력 주문받은 문자열을 가지고
- 나머지 객체들의 메소드의 매개변수로 전달
- 각 작업이 연결되어서 잘 수행됨을 확인!
review
this의 개념을 정확히 알 수 있어서 좋았다.
그동안 그냥 this는 그 객체다라고 사전적으로만 이해하고
사용하고 있었는데 this를 써주면
그 객체가 가지고 있는 { } 실행구역 안에 존재하는
지역변수가 아닌! 객체가 가지고있는
멤버 변수 / 멤버 함수를 의미하는 것이라고 이해했더니
코드를 이해하는 것이 더 용이해졌다.
객체 배열을 이해하는 부분에서는
배웠던 다차원 배열과 공통적인 부분을
예시로 들어 설명해주는 것이 이해하기 더 수월해서 좋았다.
마지막 실습을 통해 배운 내용을 다시 복습하고
인자 값을 받는 메소드를 만드는 방법도 해보았다.
아직까진 크게 어려운 부분이 없이 잘 따라가고 있다.
새로 알게 되는 내용이나 부족했던 개념 채워나가는 중!
'Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원 > 4월' 카테고리의 다른 글
22. 04. 22 - 접근 제한자(Access Modifier), 인자 값을 받는 생성자 (0) | 2022.04.26 |
---|---|
22. 04. 21 - 생성자(Constructor), 오버로딩(overloading) (0) | 2022.04.26 |
22. 04. 19 - 객체 생성, 객체의 메소드 호출, 객체의 변수 접근 (0) | 2022.04.22 |
22. 04. 15 - 이차원 배열, 총 복습(변수, 연산자, 조건문, 반복문, 배열) (0) | 2022.04.20 |
22.04.14 - 배열 복습, git 기초 개념, Q&A 시간 (0) | 2022.04.19 |