풀스택 과정 day07_Java

정유섭·2022년 3월 14일
0

2022.3.14.(월)

클래스와 this

클래스와 메서드 복습 (패스트캠퍼스, 인프런 참고!)

*** 메서드의 파라미터는 최대 3개 정도로 구성하기!

1. 클래스

1-1. 객체(Object)

- 프로그래밍에서의 객체는 프로그램에서 표현하고자 하는 기능을 묶기 위한 단위

1-2. 객체를 구성하는 단위

- 객체를 이루는 것은 데이터와 기능이다.

- 데이터는 변수로 표현된다.

- 객체 안에 포함된 변수를 '멤버 변수' 혹은 '프로퍼티' 라 한다.

- 기능은 메서드(=함수)로 표현된다.

1-3. 클래스와 객체의 관계

- 객체를 생성하기 위해서 객체의 설계도가 필요하다.

- 객체의 설계도 역할을 하는 프로그램 소스 -> 클래스( Class )

- 클래스를 통해 생성된 결과물을 객체라고 한다.  

- 공장에서 하나의 설계도를 사용하여 여러 개의 제품을 생산할 수 있는 것처럼
  하나의 클래스를 통해 동일한 구조를 갖는 객체를 여러 개 생성할 수 있다.

- 자동차의 엔진, 문, 바퀴 등은 멤버변수로 존재할 수 있다.

- 전진, 후진 등은 메서드의 형태로 표현된다.

1-4. 자동차 클래스의 예

- 동일한 설계로 만들어진 자동차라 하더라도 각각의 자동차를 구성하는 부품들은
  그 형태만 같을 뿐, 실제로는 각각 존재하게 된다.

- 클래스를 작성하면서 그 안에 생성되는 멤버변수들은 여러 개의 객체 간에 서로 동일한
  이름으로 존재하지만 실제로는 서로 다른 값이라는 의미이다.
  


- 자동차 클래스의 예. Car가 클래스에 해당되며, 각 객체의 door은 Car 클래스의 멤버변수로 생성된다.

1-5. 클래스의 기본 작성 방법

class 클래스이름 {
	멤버변수;    
	void 메서드이름( ) {
	}    
}
- 'class' 라는 예약어와 클래스의 이름을 명시하고 {...} 블록을 구성한다.

- 멤버변수는 여러 개 존재할 수 있다. 이 때, 값을 선언과 동시에 할당할 수도 있고,
  객체를 통해 간접적으로 할당할 수도 있다.

- 메서드는 여러 개 존재할 수 있다.

- 클래스 안에 포함된 멤버변수와 메서드를 특성에 따라 그룹화 하기 위한 기법이
  클래스를 작성하는 것이라고 이해할 수 있다.

1-6. 객체의 생성 방법

- 객체의 선언
 클래스이름 객체이름;
- 객체의 할당
 객체이름 = new 클래스이름( );
- 선언과 할당의 통합
 클래스이름 객체이름 = new 클래스이름( );

1-7. 객체의 사용

- 객체 안에 포함된 변수나 메서드는 점( . )으로 연결하여 접근한다.

	-> 객체 안에 포함된 변수의 값을 다른 변수에 복사하는 경우
	
		변수 = 객체이름.멤버변수;
	-> 객체 안에 포함된 변수의 값에 다른 값을 대입하는 경우
		객체이름.멤버변수 = 값;
	-> 객체 안에 포함된 메서드를 호출하는 경우
		객체이름.메서드이름();
	-> 객체 안에 포함된 메서드에 파라미터를 전달하는 경우
객체이름.메서드이름(1,2, ... , 값n); 


- Student 클래스를 정의한 후, main 메서드에서 Student클래스의 선언과 할당을 분리하고
- Student 클래스의 멤버변수 name과 age를 출력함.

이 때, Student의 name과 age에 값이 할당되어 있으므로 해당 클래스로 생성한 객체의 name과 age는 defualt값을 가진다!

1-8. 클래스를 정의하면서 멤버변수에 값을 직접 대입하는 경우

- 앞 예제(Main01.java)는 객체를 생성함과 동시에 객체 안에 name변수와 age변수가
  할당된 값을 포함하게 된다.
	
- 같은 클래스로 객체를 여러 개 생성할 경우, 모든 객체가 동일한 값을 가지게 된다.
 				std	name = "자바학생"
					age = 19
	Student
				std2 name = "자바학생"
					age = 19
- 같은 클래스를 통하여 생성된 객체라 할지라도 서로 다른 값을 대입하면
  서로 독립적인 형태로 존재하게 된다. (독립성)


같은 클래스를 이용해 생성한 객체 d와 h이지만, 각 개체의 멤버변수의 값은 다르다.

1-9. 값이 대입되지 않은 멤버변수를 갖는 클래스

- 클래스란 객체를 위한 틀을 제공하는 것이기 때문에 클래스 작성 과정에서
  멤버변수에 대입된 값은, 객체를 통하여 멤버변수의 값을 지정하기 전까지 사용될
  "기본값"으로써의 의미이다.

- 객체를 통하여 새로운 값이 대입되면 클래스 작성 시에 멤버변수에 대입한 값은
  의미를 잃어버리게 된다.

- 때문에 일반적으로 클래스 작성 시에는 멤버변수에 값을 지정하지 않는다.

1-10. 메서드를 포함하는 클래스

- 메서드란 프로그램에서 하나의 동작 단위를 의미한다.

- 두 개 이상의 메서드가 서로 동일한 대상을 위해서 존재할 경우,
  이 메서드들을 클래스에 포함시켜 그룹화 할 수 있다.

- 클래스에 멤버변수와 메서드가 공존할 경우,
  멤버변수는 모든 메서드가 공유하는 전역 변수로 존재하게 된다.

- 변수의 종류

	-> 멤버변수(=전역변수)
	: 클래스 안에서 선언된 변수로서, 클래스 블록 범위 안에서 유효하다.

	-> 지역변수
	: 메서드 안에서 선언된 변수로서, 메서드의 블록을 빠져나가지 못한다.
      그러므로 다른 메서드는 해당 변수를 인식하지 못한다. 이 규칙은
  	  조건, 반복문과 같은 블록 { } 을 형성하는 모든 경우에 해당된다.
      


- 객체의 멤버변수는 값을 할당하지 않으면 default값이 할당된다. ( int : 0, boolean : false, String : null )
- 여러 메서드를 통해 멤버변수의 값을 할당하고 이를 main 메서드에서 출력한다.

** 참고

- 지역변수와 전역변수가 선언되는 메모리 영역이 다르다!

- 전역변수(멤버변수)는 Heap 영역에 저장

- 지역변수는 Stack 영역에 저장 -> 자동으로 초기화 되지 않는다.

- Heap : 프로그래머가 원하는 방식으로 쓸 수 있는 공간, 긴 생명주기를 가진 데이터들이 저장!

- Stack : 아주 잠깐 사용하고 삭제할 데이터의 저장공간

1-11. 메서드만을 포함하는 클래스

- 객체 안에 멤버변수(=데이터)가 포함되지 않는다.

- 객체 안에 포함된 메서드를 호출하여 결과를 만들기 위한 목적이므로
  굳이 여러 개의 객체를 생성할 필요가 없다.
-> 계산 기능을 갖는 클래스의 예
class Calc {
	int sum( int x, int y ) {
		return x + y;
	}
} 
-> 기능의 활용 : 두 개의 값을 위하여 객체를 각각 생성하는 경우 
 	Calc c1 = new Calc( );
	int a = c1.sum( 100, 200 );
	System.out.println( a );
	Calc c2 = new Calc( );
	int b = c2.sum( 200, 300 );
	System.out.println( b );
- 파라미터에 의해 결과를 리턴하는 경우, 서로 다른 값을 위하여
  객체를 여러 개 생성할 필요가 없다.

- 자체적으로 데이터를 갖는 형태가 아니라 외부적인 요인인 파라미터에 의해서
  결과가 생성되므로, 하나의 객체를 재사용하는 것이 바람직하다.
 	Calc c1 = new Calc( );
	int a = c1.sum( 100, 200 );
	System.out.println( a );
	int b = c1.sum( 200, 300 );
	System.out.println( b );


클래스 안에 메서드만을 정의해 사칙연산의 기능을 모아둔 Calc 클래스를 생성


Calc 클래스를 이용하여 사칙연산을 진행


2. this

2-1. 자기 자신을 의미하는 키워드

- 클래스 안에서 this를 사용하여 "자기자신"을 표현한다.

2-2. this를 사용하여 지역변수와 멤버변수(전역변수) 구분하기

class Student {
	String name;
    
	public void setName() {
		String name;
		name = "자바학생";
	}
} 
- 멤버변수가 지역변수가 동일한 이름으로 공존할 경우,
  유효성 범위가 작은 변수가 우선적으로 인식된다.
class Student {
	String name;
    
	public void setName() {
		String name;
		name = "자바학생";		// 현재 지역변수 name
		this.name = "JSP학생";	// 클래스 멤버변수로 선언된 name
	}
} 
- this를 사용하여 파라미터와 멤버변수 구하기

	-> 파라미터도 해당 메서드 안에서만 유효한 지역변수의 일종이다.

	-> 파라미터를 사용하여 멤버변수의 값을 간접적으로 설정하고자 할 경우,
	   이름은 동일하게 지정하고 this 키워드를 사용하여 멤버변수와 파라미터를
       구별하는 것이 java언어의 일반적인 처리 방식이다.
class Student {
	String name;
		
	public void setName( String name ) {
		this.name = name;
	} 
}
- 모든 멤버변수 앞에는 'this' 키워드를 사용하여 멤버변수임을 직관적으로 표시하는 것이
  소스코드의 가독성을 위하여 바람직하다.
  


- this를 사용하여 멤버변수의 String hobby와 파라미터의 String hobby를 구분하였음.
- this가 없을 경우, 알고리즘의 변수는 가장 가까운 변수로 할당 혹은 대입된다.


- this를 이용한 예제. set과 get의 맛보기 버전이며, this를 이용하여 멤버변수와 지역변수를 구분함.

profile
도비는 자유에요!😝

0개의 댓글