728x90

~정보를 어디에 넣고 싶은데~

헷갈렸던 변수개념을 다시 잡는데 좋았다!!

 

1. 네가지 종류의 변수는 어떻게 구분하나요?

 

변수란, 고정된 상수와 달리 변화를 줄 수 있는 값이다. 

자바에는 네 가지 변수가 있다. 

 

지역변수 local variables -> 중괄호 범위 안에서 선언된 변수로 그 범위 밖으로 나갈 수 없다. 

매개 변수 parameters -> 메소드나 생성자에게 넘겨주는 변수이다. 

인스턴스 변수 instance variables -> 끼약. 이 개념을 놓치고 있었다. 메소드 밖, 클래스 내부에 선언된 변수로 static 예약어가 붙지 않았다!!

클래스 변수 class variables -> 마찬가지로 메소드 밖, 클래스 내부에 선언된 변수이지만 static 예약어가 붙는다!!!

 

 

생명 주기는 

 

지역변수 local variables -> 선언된 중괄호 내에서만 유효!

매개 변수 parameters -> 메소드 호출될 때만!

인스턴스 변수(또는 멤버 변수) instance variables -> 객체가 생성될 때 생명이 시작되고, 그 객체를 참조하고 있는 다른 객체가 없으면 소멸된다.

클래스 변수(또는 정적 변수) class variables -> 객체가 생성될 때 생명이 시작되고, 자바 프로그램이 끝날 때 소멸된다. ( 아 그래서 static 사용을 남발해서는 안되는구나. 관리가 어려워지겠구만~~ )

 

+ 자바에는 가비지 콜렉터가 있어서 얘가 알아서 메모리에서 사용하지 않는 변수를 없애준다고 한다. 

 

2.변수 이름 지을 때 대문자로 시작해도 되나요?

되지 않나? 상수값을 담는 변수를 만들때 모두 대문자..

아니면 보통 소문자로 시작!

 

3. 자료형에는 기본 자료형과 어떤 자료형이 있나요?

 

크게 보면 자바에는 

기본 자료형 Primitive Data Type , 참조 자료형 Reference Data Type 두가지가 있다. 

 

참조 자료형에서는 String을 제외하고 클래스로 객체를 생성하고 초기화할 때 new 연산자를 필수로 사용해야한다. 

String bookName = new String("Basic Java"); 물론 클래스도 다음과 같이 정의해도 상관없다. 

 

4. 기본 자료형에는 몇 가지가 있나여?

 

기본 자료형은 8개다. -> 책에서 8개에 대한 드립이 나오는데 저자의 잔잔개그가 마음에 든다.ㅋㅋㅋㅋ

 

기본 자료형은 크게 

숫자, boolean 타입으로 나뉜다. 

숫자는 다시 

정수형, 소수형으로 나뉜다. 

 

정수형: byte short int long char

소수형 float Double

기타: boolean

 

char을 제외하고 해당 타입의 변수가 정해지니 "비실한 FD" "bsil FD" 로 외우라고 한다ㅋㅋㅋㅋ감사합니당...아주 잘외워집니다!!ㅋㅋㅋ

 

6. byte는 몇 비트(bit)로 되어 있나요? 

byte는 8비트의 부호가 있는 타입이다. 

 

7. byte는 왜 만들었을까요?

적은 공간에 보다 많은 내용을 저장하기 위해서! 

일번적으로 데이터 저장 목적이 아닌 계산 시에는 int나 long을 쓴다. 

그 이유는!

byte의 최대값 127

최소값 -128인데 

 

최대값에 127 에 1을 더하면 -128이 되고 

최소값에 -128dp 1을 빼면 127이 된다. 그 이유는 오버플로우 때문!

그래서 계산의 안전성 고려한 결과이다. 

 

오버플로우란? 

: 표현가능한 범위를 벗어난 값을 말하며 돌림판처럼 돌아가는 현상을 말한다. 

컴퓨터는 값을 처리해야하는데 범위에서 벗어났으니 돌아가서 다시 시작하는 것이다. 

 

그리고 컴퓨터는 0과 1로 표현하는 2진법을 따른다. 그래서 모든 자바의 숫자 타입은 2의 배수로 그 범위가 그려진다. 

Type        Bits      Range of Values
----------------------------------------------------------------------------------------
byte         8bits    -2^7 ~ 2^7-1 (-128 ~ 127)
short       16bits    -2^15 ~ 2^15-1 (-32768 ~ 32767)
int         32bits    -2^31 ~ 2^31-1 (-2147483648 ~ 2147483647)
long        64bits    -2^63 ~ 2^63-1 (-9223372036854775808 ~ 9223372036854775807)
float       32bits    0x0.000002P-126f ~ 0x1.fffffeP+127f
double      64bits    0x0.0000000000001P-1022 ~ 0x1.fffffffffffffP+1023  
char        16bits    \u0000 ~ \uffff (0 ~ 2^15-1) * 자바에서 unsgined로 동작하는 자료형 (0 ~ 65,535)
boolean      1bit     true, false

참고 : https://jdm.kr/blog/213

8. int와 long 중 어떤 타입이 더 큰 숫자를 처리할 수 있나요?

long

9. 소수점을 처리하는 타입은?

float, double 이 있다. 

이 둘은 32비트와 64비트로 제공할 수 있는 범위를 넘어서면 그 값의 정확성을 보장못해서 중요한 계산을 할 때는 써서는 안된다. 

java.math.BigDecimal이라는 클래스를 하용하면 정확한 계산을 할 수 있다. 

소수점 처리시 보통 double을 많이 사용한다. 

 

10. char은 정수형인가요?

 

char는 8비트 정수형 처리 변수로 character(문자)의 약자이다. 

그런데 문자열과 관련된 부분에서 사용된다. 

11.  a라는 것을 char로 정의할 때 어떤 기호로 감싸주어야하나요?

''

12. true 와 false 두개의 값만 가지는 타입은 ?

boolean

 

 

728x90
728x90
메소드를 부르기 전에 객체 생성해야 한다ㅏ. 

public static void main(String[] args){

System.out.println("계산기 클래스 시작");
//클래스!!  //객체이름         //생성자!
Calculator calc = new Calculator();



}

-생성자를 이용해서 객체를 만든다. 기본 생성자는 만들지 않아도 자동으로 생성해준다!-

 

 

public class Profile {
	String name;
	int age;
	
	public void setName(String str) {
		this.name = str; //결과 같다.
//		name = str; 
		
	}
	public void setAge(int val) {
		age = val;
	}
	public void printName() {
		System.out.println(name);
		
	}
    }

this연산자를 꼭 붙여야되는 줄 알았는데 아니었구나.

 

-this 연산자 필수야? 에 대한 답변 -

this연산자는 클래스 내 현재 객체를 참조하기 위한 키워드로 사용된다.

사용하지 않아도 클래스의 멤버 변수와 메서드를 참조할 수 있다.

다만 다음과 같은 경우를 위해 쓰자. 

 

package chapter03;

public class Profile {
	String name;
	int age;
	
	public void setName(String str) {
		this.name = str;

		
	}

	
	public void printName(String name) {
        System.out.println("Local variable name: " + name);
        System.out.println("Member variable name: " + this.name); // this 키워드 사용
    }


	public static void main(String[] args) {

		Profile profile = new Profile();
		String name = "Min";

		profile.setName(name);

		profile.printName("?????");
		
		

	}

}

인자값으로 받은 로컬변수를 그대로 넘겨주고 

두번째 this.name으로는 클래스의 변수값을 가져오고 있다. 

 

 

 

-클래스와 객체 구분해라~

 

??: 객체와 인스턴스 가 더 헷갈려요

 

책에서 명확한 답을 주지 않고 표현하고 있어서 개념을 더 찾아봤다.

 

클래스: 대명사 , 객체를 만들기 위한 템플릿,설계도 역할을 한다.  비슷한 동작을 가지는 객체들을 쉽게 관리할 수 있다!  ex) 자동차,,핸드폰,,

?: 정말 추상적인데요? / 네 추상화된 개념입니다. 

 

클래스에는 변수들과 메소드가 담겨있다.

 

객체클래스 타입으로 선언되었을 때를 의미한다.   ex) 자동차 아이폰 = new 자동차();   -> 아이폰 객체

 

그럼 인스턴스는?

객체가 실제 메모리에 할당되어 사용될 때 인스턴스라고 한다. 

(클래스의 인스턴스화 -> 는 클래스로 객체를 생성한 것을 의미, 실제로 구현한다는 뜻) 

 

 

"인스턴스는 일반적으로 실행중인 임의의 프로세스, 클래스의 현재 생성된 오브젝트(객체)를 가리킨다. 

객체의 인스턴스는 데이터베이스나 백그라운드 프로세스 등 광범위한 컴퓨터 시스템 자원의 접근에 할당된 물리 메모리의 일부를 가리킨다. "

"인스턴스는 객체에 포함된다 볼 수 있다. 객체 지향 언어에서의 관점은 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다. 추상적인 개념과 구체적인 객체 사이 관계에 초점을 맞출 경우에 사용된다. 객체는 클래스의 인스턴스이고, 객체 간의 링크는 클래스 간의 연관 관계의 인스턴스이며, 실행 프로세스는 프로그램의 인스턴스이다. 즉, 인스턴스라는 용어는 반드시 클래스와 객체 사이의 관계로 한정지어서 사용할 필요는 없으며, 어떤 원본으로부터 생성된 복제본을 의미한다"

 

 

 

참고

http://wiki.hash.kr/index.php/%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4

https://cooablue.tistory.com/entry/%EA%B0%9D%EC%B2%B4Object%EC%99%80-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4Instance

 

 

 

정리해봅시다 문제

 

1. 클래스와 객체의 차이점

클래스는 껍데기에 불과. 클래스를 통해 객체를 생성해서 객체의 메소드와 변수를 가져와 사용한다. 

 

2. 객체를 생성하기 위해서 꼭 사용해야하는 예약어는?

new 연산자~

 

3. 객체를 생성하기 위해서 사용하는 메소드 같이 생긴 클래스 이름에 소괄호가 있는 것은 뭐냐?

생성자요

4. 객체의 메소드를 사용하려면 어떤 기호를 객체 이름과 메소드 이름 사이에 넣어주어야하나요?

.

5. 클래스의 일반 메소드를 사용하기 위해서 어떤 것들을 만들어야하나요?

 

객체를 생성해야한다. 

728x90

+ Recent posts