이론 파트 --
객체 - Object
> 현실 세계에서 흔히 찾아볼 수 있는 대상을 추상화(Abstraction)
> 절차 지향형은 모든 상황에 처리하는 법을 알고 대비해놓고 있어야 해서 현실 세계와 동떨어진 느낌
클래스
> 클래스는 메소드와 변수로 구성되어있다.~
> 여기서 변수는 – 클래스 변수 ( 전역변수, 인스턴스 변수, 객체 변수 이런 애들) , 지역변수 X
> 객체를 만들기 위해 필요한 객체의 설계도
인스턴스
> 실체로 만드는 과정을 인스턴스화
> 객체, 즉 인스턴스는 무조건 힙 메모리에 할당되도록 정해져있다.(배열도 힙 메모리))
> 힙 메모리에 있는 배열에 접근하기 위해서– 직접 접근할 수 없었다. 주소 값 못 외움
> 참조변수 arr 같은 변수에 주소 값 저장해놓고 접근했었다.
> 힙 메모리에 있는 것은 직접 접근할 수 없기 때문에
> 그 주소 값을 담고 있는 참조 변수를 통해서만 접근 가능하다..
접근 제한자 Access Modifier
> public( + ) , private( - ), protected( # ), default ( ~ )
> 역할 : 클래스에 속한 멤버 변수,, 멤버 함수들을 클래스 외부(다른 클래스)에서의 접근에 대한 제한을 걸기 위해 사용되는 단어를 말한다.
> 디폴트는 아무것도 안 쓰는 것이 디폴드이다. default void plus(...){} 아닌 void plus(,,,){}이런 식으로
> 접근 제한자 쓰는 이유? - 신입 개발자가 실수하는 것을 방지ㅎㅎ
> 사용자가 실수하는 것을 방지하기 위해서
> final을 사용하는 이유와 비슷하다고 이해하면 쉬울 듯
클래스 구조
> 메서드와 데이터로 구성되어있다.
> 선언부는 헤더, { } 중괄호 앞에까지
> 구현부는 { } 중괄호 부분
멤버 변수
> 클래스 안이 아니라 메서드 안에 있는 변수는 멤버 변수 – X – 얘네는 지역변수
> 선언하다의 의미는 변수를 태어나게 해주는 의미
> int zzz; 는 클래스 영역에서 선언된 생성된 변수 – 멤버변수
> int x; 메서드 영역에서 선언된 생성된 변수 – 지역변수
인스턴스 변수, 클래스 변수
> static이 있냐 - 인스턴스 변수
> static이 없냐 - 클래스 변수로 나뉜다.
> 현장에서는 필드라고 통합해서 부른다.
지역 변수
> 메소드{ } 내에 선언된 변수
> 메소드 실행 시 생성되었다가 메소드 종료 시 소멸됨
멤버 함수
> static 있으면 - 클래스 메소드 (static method)
> static 없으면 - 인스턴스 메소드 (non-static method)
> 일반적으로 말하는 메소드는 ( 인스턴스 ) 메소드를 의미하며
> 간혹 static 메소드 만들면 클래스 메서드라고 말한다.
클래스의 객체(Object == Instance ) 생성
Person p1 = new Person();
생성자 Constructor
Scanner sc = new Scanner(System.in);
> 클래스에 대한 객체 생성 시 인스턴스 변수의 초기화를 담당하는 메소드이다.
> 실제 객체를 만들어주는 친구 -
실습 파트 --
- 실습 1 (객체 생성,메소드호출)
- 실습 2(객체 데이터 호출)
실습 1 : 객체 생성 - 객체의 메소드 호출
1. 클래스와 메소드 하나 만들고
pbulic class MyClass01{
public void myMethod01(){
System.out.println("MyClass01의 myMethod");
}
}
2. 메인 클래스에서 객체 생성 및 할당
-- 객체 생성 파트
> int를 담는 그릇에 MyClass01 담을 수 없다..
> MyClass01을 바탕으로 만든 객체 MyClass01
> MyClass01 객체는 타입이 MyClass01 이다.
> ( 카운터 직원 매뉴얼로 만들어진 - 철수의 데이터 타입은 – 카운터 직원이다 )
> MyClass01이라는 데이터 타입을 새로 만든 것인가요?네!
> 클래스를 만들면 클래스 타입의 – 데이터 타입 생성한 것
> 클래스도 타입이 된다.
-- 객체 할당 파트
> 생성을 하면 힙 메모리 안쪽에 MyClass01 타입의 객체가 생긴다.
> 이 객체의 주소 값은 0x777 이런 식으로 있을 것이다.
> 이 주소 값을 외워서 사용할 수 없으니까 참조 변수에 담아서 사용한다
> MyClass01의 타입을 담을 수 있는 그릇의 변수 mc01에다가 담아서 사용한다.
역으로
> MyClass01에 접근하고 싶으면 – 이 주소 값을 저장해놓은 변수 MyClass01을 이용하여 접근한다!
Question : mc01 은 지역변수일까요?? 아닐까요?
> 메소드안에 생성된 변수는 지역변수이다.
> 메인 메소드 안쪽에 선언된 mc01은 지역변수이다.
3. 객체 메소드 호출 테스트
> 예시 상황) 카운터 직원 철수를 이용해서, 카운터 기능을 이용해 보자.
(( . )) 연산자
> 점(.)은 해당 객체에 접근하는 것이다~
> mc01이라는 변수를 이용해서 찾아간다 했는데
> 어떤 객체에 접근하려면 ( . ) 으로 접근하는 것이다.
> 점(.)왼쪽에 있는 객체 접근하겠다는 의미
실습 2 : 객체 데이터(변수)에 접근해보기
카페 프로그램 만들기 -
1. 카운터 직원과 주방 직원 클래스를 만들고 데이터와 메소드 입력하기
2. 카운터 직원과 주방 직원 객체 생성하고 메소드 호출해보기
3. 직원들의 데이터 세팅해주고 출력해보기.
빨간 줄의 이유 - 안 보인다는 오류 – 패키지가 달라서 안 보인다
정확히는 디폴트 접근 제한자라서 다른 패키지에서 사용 못한다.
CounterEmp 클래스로 가서 변수에 public 접근 제한자 추가해주자
접근 제한자 디폴트에서 -> public 으로 변경해주면
객체의 데이터(변수)에 접근 가능!
값을 넣어줄 수도 수정할 수도 있다.
기본자료형에 초기화 안 해주면 기본값이 적용되어있다.
밑에 있는 표 참조
이제 우리는
객체의 메소드 - 사용 가능
객체의 데이터(변수) - 접근 가능
이 2개만 알면
객체 마스터!
+@ 접근 제한자
+@ 기본 자료형 변수의 기본 값
review
이론적인 내용을 쭉 한 번 훑어보고
실습으로
객체를 생성하고 할당해주고
만든 객체로 메소드와 변수들을
호출해 보았다.
오늘은 새로운 내용보다는
객체의 생성과 활용에 대해 더 이해했다.
CounterEmp A = new CounterEmp();
CounterEmp 타입 객체를 생성한다 - 했을때
A객체를 생성했다 - 이런 식으로
그동안은 변수일뿐이었던 A를 중요하게 생각했던 것 같다.
결국 객체는 힙 메모리에 생기는 것이고
참조 변수 A는 그 주소 값을 담고 있는 애일뿐.
대단해 보였던 A가 별거 아닌? 은 아니지만 ㅎㅎ
객체에서 -> 변수로 개념이 바뀐 것이
이번 강의 시간을 통해 바뀐 내 생각이다.
'Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원 > 4월' 카테고리의 다른 글
22. 04. 21 - 생성자(Constructor), 오버로딩(overloading) (0) | 2022.04.26 |
---|---|
22. 04. 20 - this, 객체 배열, 인자 값 받는 메소드 (0) | 2022.04.22 |
22. 04. 15 - 이차원 배열, 총 복습(변수, 연산자, 조건문, 반복문, 배열) (0) | 2022.04.20 |
22.04.14 - 배열 복습, git 기초 개념, Q&A 시간 (0) | 2022.04.19 |
22. 04. 14 - 가위,바위,보 게임(조건문), Scanner, Array (0) | 2022.04.15 |