Ⅰ. 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"