JAVA

자바 개발자 양성과정 2주차 [객체]

J휘 2024. 7. 15. 00:02

이번 주는 객체에 대해서 배우는 한 주 였다。

 

[this]
this -> 인스턴스 객체(메모리를 사용중인 객체) 자기 자신을 의미
1. 자기 자신의 메모리를 가르킨다.
2. 생성자에서 다른 생성자를 호출할 수 있다.
3. 자기 자신의 주소를 반환할 수 있다.

입력받는 메서드에서 매개변수와 필드 변수의 이름이 같을 때 사용하는데

this를 붙이면 현재 사용중인 메모리와 구분지을 수 있다.

 

this는 해당 객체의 필드값을 불러오는데
생성자에서 매개변수의 이름과 필드변수의 이름이 같지 않아도 되지만
현업에선 대부분 this를 붙여서 같게 하기 때문에 그렇게 하는게 좋다.

 

[getter / setter]

값을 입력받는 getter / setter.

setter로 값을 입력하고
getter로 값을 출력한다.

이 메서드들은 단축키로 자동생성이 가능하다.

alt shift s + r :getter /setter 

아주 편리함. 

 

[Class]

class의 구조에는 
필드영역(사용할 데이터 선언하는 영역)
생성자 영역 (데이터를 초기화 해주기 위한 특수목적의 메소드를 정의하는 영역
메소드영역(클래스의 기능을 정의하는 영역) 이 있다,

코딩할 때 필드영역부터 차근차근 해야 헷갈리지 않는다.

 

[접근제한자]
접근제한자란 : 해당 구조에 접근할 수 있는 범위를 제한하는 것

접근제한자에는 총 4가지가 있는데
접근 순서는 public > protected > default > private 순으로 빡셈

public : 어디서든(같은패키지, 다른패키지 모두) 접근 가능
protected : 같은패키지 + 다른패키지일 경우 상속관계에서만 접근가능
default : 같은패키지일때만 접근 가능
private : 오직 해당 클래스에서만 접근 가능

보통필드영역에 있는 변수에 쓰는 접근제한자는 다 가능한데
public이랑 private를 주로 사용함.

클래스에는 public이랑 default만 사용 가능...
[클래스에 사용 가능한 접근제한자 2가지]
default, public
(접근제한자 선언을 안 하면 자동으로 default으로 선언된다)

메소드(생성자 포함)는 이름이 같아도 매개변수의 종류, 갯수에 따라서 중복선언이 가능하다
이를 [오버로딩]이라고 한다.

 

 

[캡슐화]
:추상화를 통해 정의된 속성들과 기능들을 하나로 묶어 관리하는 기법인데
클래스에서 가장 중요한 목적인 "데이터의 접근 제한(정보은닉)"을 원칙으로
외부로부터의 "데이터접근을 막고"
대신 "데이터를 간접적으로 처리(값을 변경하거나, 가져오는 것등)"할 
메소드들을 클래스내부에 작성하여 관리하는 것

간단하게 말하자면 

약에 먹는 순서가 있다고 쳤을 때 한번에 정해진 방법 순서대로 먹을 수 있게

묶어서 정리하는 거라고 생각하면 될듯,

 

 

그리고 앞서 말했던 접근제한자 중 하나인

[static]
static은 코드가 실행되자마자 힙 메모리 안에 생김 (객체와 별개의 메모리 공간)
객체와 공간이 다르기 때문에 this로 부를 수 없음
스태틱변수는 클래스 내에서 this로 접근할 수 있지만
스태틱메서드의 경우 스태틱메서드 안에서 this로 필드의 변수를 사용할 수 없음
(스태틱은 생성공간 자체가 다르기 때문에 this로 부를 수 없음)

객체가 여러개 생겨도 static변수는 단 하나.
모든 객체는 클래스변수 하나를 공유해서 쓴다.
필드와 메서드에만 static이 붙음

대부분 클래스로 접근을 한다. [클래스명.static변수명] 
클래스변수는 클래스 시작하자마자 선언해줘야함.
생성자 안에 만들면 인스턴스 생성 시 매번 초기화됨.

보통 정보를 담는 클래스에서 필드변수에 static을 붙인다.

 

+ 데이터 삭제는 null값을 넣거나 그자리에 새롭게 다시 만들면 끝!

+ this. 는 지금 실행중인 메모리 안에서 찾아서 쓴다는 소리

 

====================================================

저것들을 다 배우고 이제 문제를 풀어야 했다. 

근데 메소드 하나하나가 전부 문제 1234 인 셈.. 

거기에다가 여러 클래스가 연결되있으니 머리 터질듯..

 

핵심은 캡슐화를 통한 기능분류와 각 클래스 간의 정보은닉을 바탕으로
메소드를 이용해 간접적으로 데이터를 주고 받는 능력이 필요했고
문제이해능력도 상당히 필요했다. 문제가 이제 친절하지 않고 그냥
각 클래스들의 기능과 요소들만 알려주기 때문에 알아서 클래스간 
연결을 시켜야했다.

 

 

이게 기능들을 담당하는 controller 클래스는 기능을 만들어주면 되고

meun클래스는 controller 클래스 객체를 생성하고 거기서 기능을 출력문과 함께 정리.

이제 Run에서 실행하는 느낌인데

이게 menu클래스가 생각보다 어렵다...

 

menu클래스에서 가장 헷갈린 부분이

1. while문이 어디부터 어디까지 포함을 해야하는지에서 가장 에러(논리에러)가 많이난다.

2. switch문에서 break와 return의 사용법을 혼동한 점.

ㄴ break는 해당 case에서 아래 case코드들을 실행하지 않고 해당 반복을 넘기기 위한 것이고

ㄴ return은 해당 메소드를 끝내는 것. 

코드를 짜다보면 정보들을 여기저기 건내주고 메뉴 간의 이동이 있다보니 

오히려 이런 구조적인 부분에서 더 헷갈리는 것 같다. 

 

문제를 많이 풀어봐야하는데 수업시간엔 생각보다 쉽지 않아서 복습이 필요해보인다

내일 월요일에 남아서 자습을 해야할듯 싶네