Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/4월

22. 04. 19 - 객체 생성, 객체의 메소드 호출, 객체의 변수 접근

giggs 2022. 4. 22. 11:00

이론 파트 -- 

 

 

 

객체 - 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()객체가 new 키워드로 힙메모리에 생성되고, 데이터 타입(그릇) 맞춰준 변수 mc01에 주소 값 할당

 

 

 

 

> 생성을 하면 힙 메모리 안쪽에 MyClass01 타입의 객체가 생긴다.

> 이 객체의 주소 값은 0x777 이런 식으로 있을 것이다.

> 이 주소 값을 외워서 사용할 수 없으니까 참조 변수에 담아서 사용한다

> MyClass01의 타입을 담을 수 있는 그릇의 변수 mc01에다가 담아서 사용한다.

 

역으로

> MyClass01에 접근하고 싶으면 이 주소 값을 저장해놓은 변수 MyClass01을 이용하여 접근한다!

 

 

Question : mc01 은 지역변수일까요?? 아닐까요?

> 메소드안에 생성된 변수는 지역변수이다.

> 메인 메소드 안쪽에 선언된 mc01은 지역변수이다.

 

 

 

 


 

 

 

3.  객체 메소드 호출 테스트

> 예시 상황) 카운터 직원 철수를 이용해서, 카운터 기능을 이용해 보자.

 

 

 

만든 객체(주소 값)를 담아둔 변수 mc01를 이용하여 메소드 호출!

 

 

 

(( . )) 연산자

> (.)은 해당 객체에 접근하는 것이다~

> mc01이라는 변수를 이용해서 찾아간다 했는데

> 어떤 객체에 접근하려면 ( . ) 으로 접근하는 것이다.

> 점(.)왼쪽에 있는 객체 접근하겠다는 의미

 

 

 

 

 

 


 

 

 

 

 

실습 2 : 객체 데이터(변수)에 접근해보기

 

 

 

카페 프로그램 만들기 -

 

1. 카운터 직원과 주방 직원 클래스를 만들고 데이터와 메소드 입력하기

 

 

카운터 직원 클래스 / 주방직원 클래스 / 데이터와 기능들 넣어주기

 

 

 


 

 

 

 

2. 카운터 직원과 주방 직원 객체 생성하고 메소드 호출해보기

 

 

 

메인 클래스로와서 객체 생성 / 객체의 메소드 호출

 

 

 


 

 

 

 

3. 직원들의 데이터 세팅해주고 출력해보기.

 

 

 

main 클래스에 객체의 데이터에 접근해보니 에러나옴.

 

 

 

빨간 줄의 이유 - 안 보인다는 오류 패키지가 달라서 안 보인다

정확히는 디폴트 접근 제한자라서 다른 패키지에서 사용 못한다.

CounterEmp 클래스로 가서 변수에 public 접근 제한자 추가해주자

 

 

 

 

카운터 클래스에서 변수에 public 접근 제한자 추가해주기

 

 

 

접근 제한자 디폴트에서 -> public 으로 변경해주면 

객체의 데이터(변수)에 접근 가능!

값을 넣어줄 수도 수정할 수도 있다.

 

기본자료형에 초기화 안 해주면 기본값이 적용되어있다.

밑에 있는 표 참조

 

 

 

 


 

 

이제 우리는

객체의 메소드 - 사용 가능

객체의 데이터(변수) - 접근 가능

 2개만 알면

 

객체 마스터!

 

 

 

 


 

 

 

 

 

+@ 접근 제한자

 

 

 

 

 

 

 

 

+@ 기본 자료형 변수의 기본 값

 

 

 

 

 

 


 

 

 

 



review



이론적인 내용을 쭉 한 번 훑어보고

실습으로
객체를 생성하고 할당해주고
만든 객체로 메소드와 변수들을
호출해 보았다.

오늘은 새로운 내용보다는
객체의 생성과 활용에 대해 더 이해했다.

CounterEmp A = new CounterEmp();

CounterEmp 타입 객체를 생성한다 - 했을때
A객체를 생성했다 - 이런 식으로
그동안은 변수일뿐이었던 A를 중요하게 생각했던 것 같다.
결국 객체는 힙 메모리에 생기는 것이고
참조 변수 A는 그 주소 값을 담고 있는 애일뿐.

대단해 보였던 A가 별거 아닌? 은 아니지만 ㅎㅎ
객체에서 -> 변수로 개념이 바뀐 것이
이번 강의 시간을 통해 바뀐 내 생각이다.