본문 바로가기
카테고리 없음

22-08-30 자바이야기(ft.ITwill 국비지원학원)

by Hunihu 2022. 8. 30.

아침에 비가 왔는데 차가 막혀서 성수대교 위에 갖혀버렸다 지각할뻔 했는데 다행히도 아슬하게

9시 39분에 세이프했다 ㅠㅠ

 

비올때는 무조건 지하철타자.. 학원이 강남에 있다는 사실을 가끔 망각하곤 한다 ㅠㅠ

 

Class와 객체를 활용한 간단한 입출금이체 프로그램 만들기!

우선 이렇게 Account 클래스를 생성해주공 필드에서 클래스 변수 2개 설정해주고 다음에 매개변수(Parameter) 2개를 갖는 생성자도 설정해준다.! 

그리고 생성자를 통해서 필드에 있는 클래스 변수에 각각 생성자를 통해받는 파라미터값 할당해주기!

 

입금 메소드 똬 만들어주고

출금 메소드도 똬 만들어주고

요놈이 문제의 그놈입니다 그놈 저는 해보다가 너무 헷갈리고 갈피를 못잡고 너무 어려워서 심술과 반항심이 생겼습니다 ㅋㅋ

Parameter를 2개만 설정하라고 하셨는데... 싫어요! 하고 3개설정해서 쉽게 해결했습니다..ㅋㅋ

위에 코드는 강사님이 설계하신 코드입니다. ㅠㅠ

 

사실 개념이 잘 정리되어있으면 쉬운 코드였어요. 어차피 이 transfer 메서드는 메인메서드에서

객체.transfer(parameter1,parameter2) 로 사용되기 때문에 객체(계좌)가 어차피 this의 권한을 가지게 되거든요.

 

즉 this.balance 변수가 요청한 객체의 balance를 의미하는것이기때문에 Parameter로 금액을 이체할 또 다른 객체(계좌)만 받아오면 되는 거였습니다.

 

그리고 파라미터1에 들어가 있는 Account 라는 데이터 타입도 저게 사실 클래스를 지칭하는건데 저렇게 써도 되는건가?

하는 의심도 들고 헷갈리더라구요 ㅠㅠ 근데 밑에 주석에서처럼 그냥 단순 변수선언을 위해 데이터타입처럼 사용해도 되는거였습니다.. 아! 그리고 간단한 예제라서 return 값은 항상 True로 고정해뒀습니다.

 

만약 이체가 불가능한 데이터를 전달받으면 false로 작동하게 하는 프로그램을 만든다면 더욱 멋있겠죠..?

 

아무튼 이런식으로 계좌이체 메서드도 완성을 했습니다.

요거는 계좌에 대한 정보를 한눈에 볼수있게 설정해둔 메서드입니당

 

메인 메서드에서는 저런식으로 호출하고 결과도 이렇게 뽝 나왔습니다.

 

Modifier(수식어)?

자바에도 수식어가 있다는 놀라운 척하는 사실!

그동안 우리가 의미는 몰랐지만 넣어주길래 써야하는건가보다 했던 바로 그 Public, static, void ...etc 

이번에는 이 Modifier(수식어)에 대해서 공부할 시간이다~

강의시간에 정리된 내용 살짝 보여드리면 요정도

우선 종류는 private,(package) -> 요놈은 생략가능하므로 괄호안에, protected, public 등이 있고 세부내용은 위 사진과 같당.

그리고 위에 내용들을 적용해보았을 때의 코드들.. 사실 이부분은 개념정리? 느낌이라서 딱히 글로 표현할 만한것은 없다.

그리고 만약 다른 패키지간에 서로 상호작용(클래스 호출)을 한다면 어떻게 될것인가에 대해서도 알아보았는데

 

서로 다른 패키지에 있을때

이런식으로 import로 클래스를 불러와주거나

아니면 객체선언시에 이렇게 경로를 직접 전부 다아아아 입력해줘야한다. (귀찮쓰)

데이터 캡슐화?

내용은 이러하고 쉽게 말하면 캡슐처럼 내부를 보호한다는 개념이다.

그리고 열쇠를 통해서 수정할 수 있게 만드는.. 내부의 필드들을 private로 설정해서 특별메서드(getter,setter method)를 사용하지 않고는 그 필드들에 접근할 수 가 없다.

private로 선언된 클래스변수들

이런식으로 private 선언하고 

요런식으로 getter, setter 메서드로 연결통로 만들어주면 된다. 그리고 밑에 if문이 들어간 setter method는 데이터 캡슐화의 무결성에 관련된 내용인데

만약에 나이(age)라는 private로 선언된 필드가 있을때 setter 메서드를 이용하면 얼마든지 음수로 적용할 수 있다. 그래서 메서드안에 조건문을 넣어줘서 음수는 적용될 수 없도록 설정해두었다.

이런식으로 private 된 필드들을 불러올 수가 없다. visible 하다고 합니다.

이런식으로 if문 이용해서 똑바로 적으셈! 할 수 있습니다.

getter,setter,Constructor(생성자) 마법사

그리고 꿀같은 팁을 알게되었는데

 

마우스 오른쪽 클릭 소스에 들어가보면 이렇게 getter,setter,Constructor(생성자)를 만들수있는 마법사가 있습니다!

 

요런식으로 getter와setter를 생성해줄 수 도 있고

 

이런식으로 생성자를 만들어 줄 수 도 있습니다.

 

그리고 우리가 위에서 메서드나 필드에 대한 modifier를 알아봤다면 이번에는 클래스의 수식어를 알아볼 차례인데.

정리된 개념을 보자면 클래스에는 Public, (Package) 생략가능 요 두가지만 일단 설정할 수 있습니다.

추후에 다른 수식어도 설정이 가능하다고 하는데 저의 수준범위에서는 요 두가지만 존재한다고 생각하면 된다고 하시네용?

 

한개의 클래스 안에 여러가지 클래스가 정의될 순 있지만 Public class는 한개의 java파일에 하나만 존재해야 한다는 사실.

그리구 위와 같이 package로 선언된 클래스의 경우에는 다른 클래스에서 불러다가 사용할 수 가 없다는 사실!

 

Static, 인스턴스

강사님이 이해하기 쉽게 객체,클래스,인스턴스 3가지에 대해서 붕어빵에 비유해서 설명을 해주셨는데 사실 이 비유를 듣고도 객체와 인스턴스의 차이를 이해하는건 쉽지 않네요.

객체는 약간 추상적인 개념? 그리고 인스턴스는 좀 더 실질적인 개념인거 같아요. 예를들어 홍길동,허균이라는 이들은 두명의 사람(객체)라는 공통점이 있지만 그들은 각각 홍길동과 허균(인스턴스)이라는 실질적인 존재들이에요.

 

이해가 안되신다구요? 정상입니다.

 

그리고 많은 분들이 객체와 인스턴스를 거의 동일한 개념으로 사용한다고 하시네용. 그래도 완전

객체 == 인스턴스는 아니라는점..

 

우선 인스턴스 멤버의 개념은 이러한데..

test01 이라는 참조변수를 이용해서 test01.instanceVariable 이라는 필드를 호출하고 test01.staticVariable 이라는 메서드를 호출했다. test01.staticVariable 이것의 경우 참조변수를 이용해서 static 메서드를 호출했다. 가능은 하지만 권장하지는 않는 방법이라고 하심. 

 

자바의 경우 메모리를 3개의 공간을 이용하는데 스택(stack), 힙(Heap), 메서드(Method) 이다. 인스턴스멤버의 경우 스택과 힙에 메모리를 저장해두고 객체를 이용해서 호출하고 하지만 static멤버의 경우 Method 라는 메모리공간을 이용한다.

static 멤버의 가장 큰 장점은 객체를 생성하지 않고도 사용할 수 있다는 점인것 같다.

Final 수식어

final 수식어의 그동안의 수식어와의 차이점은 클래스와 지역변수에도 사용이 된다는점이다.

final의 지역 변수의 경우 값이 한번 저장되면 변경을 할 수가 없게된다.

 

이런 식으로 에러가 발생되는 것을 볼 수 있다.