본문 바로가기

카테고리 없음

[Day2][Java] instance, static, local 변수 / instance, static 함수 / 자료형(Data Type)의 종류

Ⅰ. instance 변수와 static 변수

-- instance(인스턴스) 변수 : 서로 다른 instance끼리 공유하지 못하고 각자 자신의 instance 내에서만 사용하는 변수이다.

-- static 변수 : 서로 다른 instance끼리 공유하는 변수이다.

-- instance 변수와 static 변수는 초기화를 하지 않더라도 자동적으로 초기화가 되어진다.

-- 데이터 타입이 byte, short, int, long(정수형) 는 자동적으로 0으로, float, double(실수형)는 0.0으로 초기화,

-- char는 자동적으로 ' '으로, 클래스인 것은 자동적으로 null로 초기화된다.

-- Eclipse 내에서 파란색으로 나타난다.

Ⅱ. local 변수(지역 변수)

-- 특정 메소드 내에서 선언되어진 변수를 말한다.

-- 선언되어진 해당 메소드가 끝나는 순간 자동적으로 소멸되어 다른 함수 내에서는 사용할 수 없다.

-- instance 변수와 static 변수랑 다르게 반드시 초기화를 해 주어야 한다.

-- Eclipse 내에서 갈색으로 나타난다.

▶▶ 변수의 명명규칙

1) 변수명의 길이에는 제한이 없다.

2) 대,소문자 구분이 있다.

3) 첫글자가 숫자는 안된다.

4) 특수문자는 '_' 와 '$' 만 사용이 가능하다.

5) 예약어(예 package, import, public, class, String, int, float ....)는 변수명으로 사용불가하다.

6) <권장사항> 첫글자는 소문자로 시작하고 단어와 단어가 결합된 경우이라면 두번째 단어는 대문자로 시작하는것이 일반적이다.

==> 첫글자를 대문자로 쓸 경우 JSP에서 다 깨지므로, 규칙은 아니지만 지켜 주는 것이 좋다.


 

 

 

public static void main(String[] args) {
	MainApp ma = new MainApp();
	ma.inst();
	stt();
	}

-- main() 함수 밖에 있는 instance 함수와 static 함수를 불러온다.

-- stt();의 경우, MainApp.stt(); 로 불러와야 하지만 main()이 있는 클래스에 존재하기 때문에 생략 가능하다.

Ⅲ. instance method(함수)

 

 

 

int no;
static int size;

void inst() {
	System.out.println("== inst() 메소드 호출 합니다. ==");
	System.out.println("1. 사이즈 : "+size);
	System.out.println("2. 번호 : "+ no);
		
	int point = 10;
	System.out.println("3. 포인트: " + point);
	}

 

 

 

 

 

-- size와 no 변수의 값을 지정하지 않았으므로 자동적으로 0으로 초기화되어 나타난다.

-- instance method는 반드시 instance 를 생성하고서 생성된 instance를 통해서 호출 되어진다.

 

 

Ⅳ. static method(함수)

-- 공통적으로 사용되는 함수가 있을 때 사용한다.

-- instance를 생성하지 않더라도 호출되어진다.

-- static 메소드 내에서는 instance 변수를 사용할 수 없다.

 

 

 

static void stt() {
		System.out.println("== stt() 메소드 호출 합니다. ==");
		System.out.println("1. 사이즈 : "+size);
		// System.out.println("2. 번호 : "+ no); -- 오류!!
		int point = 20;
		System.out.println("3. 포인트: " + point);
	}

 

 

 

-- 번호를 나타내는 변수 no는 instance 변수이므로 static 메소드 내에서 사용할 경우 오류로 나타난다.

 

 

 

-- size 변수의 값을 지정하지 않았으므로 자동적으로 0으로 초기화되어 나타난다.

 


 

현재 시각을 알려주는 static method를 만들어 보자.

 

 

 

import my.util.MyUtil;

public class MainApp {

	public static void main(String[] args) {
		
		System.out.println("=== MainApp의 main() 메소드 호출 ===");
		MyUtil.currentTime();
	}

 

 

 

 

 

-- 현재시각 기본 출력 형태

-- 익숙한 형태로 바꾸고 싶다면 밑의 코드처럼 따로 지정해 주어야 한다.

 

 

 

import java.util.Date;

public class MyUtil {
	public static void currentTime() {
		Date now = new Date(); // 현재시각
		System.out.println("▷현재시각: " + now);
	}
}

 

 

 

 

-- yyyy(년도)-MM(월)--dd(일) HH(시):mm(분):ss(초) a(오전/오후)

-- 대문자와 소문자 사용에 주의하여야 한다.

 


 

instance method와 static method를 만들어 호출해 보자.

 

 

 

import java.text.SimpleDateFormat;
import java.util.Date;

public class MyUtil {
	public static void currentTime() {
		Date now = new Date(); // 현재시각
		SimpleDateFormat sdformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
		System.out.println("▷현재시각: "+ sdformat.format(now));
	}
}

my.util(package)-MyUtil(class, main method 미포함)

 

 

 

 

-- main method가 포함된 클래스 이외에 member 클래스를 따로 만들고,

회원 정보를 출력하는 showInfo 함수를 만들어 main 함수에서 호출한다.

 

 

 


Ⅰ. 자료형의 종류

1. 원시형 타입(Primitive Type)

1-1) 정수형(byte, short, int, long)

-- 자바에서 정수형의 기본타입은 int 이다.

-- 그러므로 정수형의 값이 -2,147,483,648 ~ 2,147,483,647 범위를 벗어난 것이라면 반드시 숫자뒤에 소문자 l 또는 대문자 L 을 붙여야 한다.

▷ byte (1byte == 8bit) : -2^7 ~ 2^7-1 ==> -128 ~ 127

▷ short(2byte == 16bit) : -2^15 ~ 2^15-1 ==> -32,768 ~ 32,767

▷ int (4byte == 32bit) : -2^31 ~ 2^31-1 ==> -2,147,483,648 ~ 2,147,483,647

▷ long (8byte == 64bit) : -2^63 ~ 2^63-1 ==> -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

1-2) 실수형(float, double)

-- 자바에서 실수형의 기본타입은 double 이다.

-- 그러므로 실수값을 float 형태로 나타내기 위해서는 실수뒤에 반드시 소문자 f 또는 대문자 F를 붙여야 한다.

▷ float(4byte) : 단정밀도 소수점이하 7자리까지 표현됨. 135.3246235

▷ double(8byte) : 배정밀도 소수점이하 15~16자리까지 표현됨. 135.3246234502345642

1-3) 문자형(char)

-- char : 자바는 유니코드 체계를 사용하므로 문자형 타입인 char 는 2byte 이며, 범위는 0 ~ 65535 이다.

-- char 타입에는 문자 1개 또는 숫자(0~65535)도 올 수 있다.

▷ 'A' => 65 'a' => 97

▷ 'B' => 66 'b' => 98

▷ 'C' => 67 'c' => 99

-- '대문자' + 32 => 소문자에 해당하는 숫자

-- '소문자' - 32 => 대문자에 해당하는 숫자

▷ '0' => 48

▷ '1' => 49

▷ '2' => 50

▷ '9' => 57

▷ ' ' => 32

-- UNICODE 표 참조

http://www.tamasoft.co.jp/en/general-info/unicode.html

▶▶ int(4byte) 아래의 크기인 byte(1byte), short(2byte), char(2byte) 타입이 사칙연산(+ - * /)을 만나면 자동적으로

int 타입으로 자동 형변환이 발생된다.

1-4) 참(true) 또는 거짓(false)을 담아주는 boolean 타입

-- 크기가 1byte

2. 참조형 타입(Reference Type)

-- 클래스 객체(==object ==instance) 타입

-- 메모리상에 저장되어진 객체의 메모리 주소를 참조하는 것이다.

-- 참조형 타입(Reference Type) 메모리상에 크기는 4byte 를 차지한다.


학생들에 대한 성적처리 프로그래밍을 만들어 보자.

 

 

 

public class MainApp {
public static void main(String[] args) {	
		Member mbr1 = new Member();
		
        mbr1.id = "leess";
		mbr1.pwd = "qwer1234$";
		mbr1.name = "이순신";
		mbr1.email = "leess@gmail.com";
		
		Member mbr2 = new Member();
		mbr2.id = "eomjh";
		mbr2.pwd = "abcd1234";
		mbr2.name = "엄정화";
		mbr2.email = "eomjh@gmail.com";
		
		Member.address = "서울시 강남구 도곡동";
		
		mbr1.showInfo();
		mbr2.showInfo();
}

 

 

 

Member mbr1 = new Member();

-- Member 클래스를 객체화하는 것이다. 즉, Member 클래스 객체생성이라고 한다.

-- 클래스 파일을 읽어다가 메모리에 로드해 준다. 

-- Memory(RAM)에 로딩되어진 객체(object)를 인스턴스(instance)라고 부른다.

 

 

 

 

public class Member { 
	
	String id;
	String pwd;
	String name;
	String email;
	
	static String address;	// static 변수
	
	void showInfo() {
		System.out.println("=== 회원 정보 ===");
		System.out.println("1. 아이디: "+id);
		System.out.println("2. 암호: "+pwd);
		System.out.println("3. 성명: "+name);
		System.out.println("4. 이메일: "+email);
		System.out.println("5. 주소: "+address);
		System.out.println("");
	}
	}

-- main method가 포함된 클래스 이외에 member 클래스를 따로 만들고, 회원 정보를 출력하는 showInfo 함수를 만들어 main 함수에서 호출한다.

 

 

 

 

System.out.println("1. 아이디: "+id);

 

 

 

-- 숫자+숫자에서 "+"는 더하기 연산이고,
   ex> 10+20 = 30
-- 문자열+문자열 또는 문자열+숫자 에서 "+"는 문자열 결합이다.
   ex> "abc" + "def" = "abcdef"
   ex> "abc" + 123 = "abc123"
   ex> "10" + 20 = "1020"