멤버의 의미
클래스 안에 있는 구성을 의미한다.
- 멤버 변수(= 필드)
멤버 변수는 인스턴스 변수와 클래스 변수(static 변수) 두 종류가 존재한다.
인스턴스 변수는 static 이 선언되지 않는 변수를 말하며,
인스턴스마다 고유하게 존재하는 변수로 , 객체가 생성될때마다 메모리에 할당되는 변수.
클래스 변수는 static이 선언된 변수를 말하며,
클래스 전체에서 공유되는 변수를 말한다. 클래스가 메모리에 로드될때 할당되는 변수.
public class MyClass {
int instanceField; // 인스턴스 필드
static int classField; // 클래스 필드
}
- 멤버 메서드
멤버 메서드는 객체의 동작을 정의하는 함수로 인스턴스 메서드와 클래스 메서드로 분류된다.
인스턴스 메서드는 static이 선언되지 않는 메서드를 말하며,
인스턴스 변수와 static 변수를 사용할 수 있다.
클래스 메서드는 static이 선언된 메서드를 말하며,
인스턴스 변수를 사용할 수 없다.
public class MyClass {
void instanceMethod() {
System.out.println("Instance method");
}
static void classMethod() {
System.out.println("Class method");
}
}
- 초기화 블럭
초기화 블럭은 인스턴스가 생성될때 실행되는 블럭으로 ,
인스턴스 초기화 블럭과 클래스 초기화 블럭이 있다.
public class MyClass {
{
// Instance initialization block
System.out.println("Instance initialization block");
} // instance 초기화 블럭
static {
// Static initialization block
System.out.println("Static initialization block");
} // static 초기화 블럭
}
- 내부 클래스
정적 내부 클래스와 , 비 정적 내부 클래스가 있다. (추후 배울 예정)
public class OuterClass {
static class StaticInnerClass {
// Static inner class
}
class NonStaticInnerClass {
// Non-static inner class
}
}
자바의 규칙
1. 메인 메서드가 있는 클래스명과 파일명은 동일해야한다. (대문자로 시작)
- 메인 메서드명을 임의로 변경할경우 실행되지 않는다 . (main O , mains X)
2. 실행문은 메서드 또는 초기화 블럭에 들어갈 수 있다.
- 외부에 들어갈 수 없다.(아래 예문 확인)
3. 변수명은 숫자와 특수문자가 첫글자가 될 수 없다.
4. 변수명은 _(언더바) , $(달러기호) , 소문자로 시작해야 한다.
5. 예약어는 패키지 명 , 클래스명 , 변수명으로 사용 할 수 없다.
6. final 변수는 변하지 않는 숫자를 표기함의 특수성의 구별을 위해 변수명을 전체 대문자로 표기한다.
public class Ex01_Hello {//메인클래스 -> 파일명과 동일해야함.
// int num = 100;
// 변수 선언이 가능함.
static int num = 100;// 멤버 변수 선언이 가능함.
//System.out.println("안녕하세요 !!"); 실행문은 메서드 안에서만.
public static void main(String[] args) { // 멤버 메서드
// TODO Auto-generated method stub
System.out.println("안녕하세요 !!");
System.out.println("안녕하세요 !!");
System.out.println("num = "+ num);
}
}
자바의 변수
변수의 개념
자바에서는 변수로 데이터를 저장하기 위해 이름을 할당받는 메모리 공간을 의미한다.
타입을 명시하여 타입마다 맞는 메모리 공간을 할당 받기 때문에 ,
타입을 명시해줘야 한다.
- 기본자료형의 특징
모두 기본 값이 정해져 있음.
변수 선언과 동시에 메모리 생성 , 값은 메모리의 stack(스택) 영역에 저장되어 실제 자료값을 갖는다.
- 참조자료형의 특징
기본형과 달리 실제 값이 저장되어 있지 않고, 자료가 저장된 공간의 주소를 저장하게 된다.
실제값은 heap 영역에 저장되어 있고 , 그 주소값을 참조하여 사용한다.
stack 영역에 저장된 참조형 변수는 null값을 줌으로 초기화를 시킬 수 있다.
자료 참조 : https://inpa.tistory.com/entry/JAVA-☕-변수의-기본형-참조형-타입
--변수 이름의 적합성 테스트.
- test 1
String name = "홍길동";
good !
이름이라는 명시적인 변수명을 가지고 소문자로 시작하는 변수.
- test 2
String irum = "홍길동";
비추천 ,
변수명으로의 역할은 명시적이여야 하는데 명시성이 떨어짐으로 비추천함.
-test 3
String 이름 = "홍길동";
사용금지,
변수명으로 한글을 허용하나 , 한글을 지원하지 않는 라이브러리를 이용하게 될 때 오류가 생길 수 있다.
-test 4
String Name = "홍길동";
사용금지,
변수명이 대문자로 시작한다고 해서 오류가 나지는 않으나 ,
다른 작업자가 오해할 수 있고, 특정 라이브러리는 대문자를 클래스로 인식할 수도 있다.
--기본자료형의 타입체크.
test 1.(long 타입)
long l = 1234567890123;
long 타입의 l 에 L을 명시 하지 않는다면 int 타입으로 취급하기 때문에,
타입이 맞지 않음의 타입 미스매치 오류가 발생.
long l = 1234567890123L;
올바르게 변경해줘야 한다.
test2. (float 타입)
float f = 123.456;
float 타입에 f 또는 F 를 명시하지 않는다면 double 타입으로 취급하기 때문에,
타입이 맞지 않음의 타입 미스매치 오류가 발생.
test3.(char 타입)
char 형 : 한글 영문 모두 한글자를 의미함.(2byte)
2byte로 int 타입으로도 사용 가능.
타입 캐스팅
//char 형 : 한글 영문 모두 한글자를 의미함.(2byte)
// 2byte로 int 타입으로도 사용 가능.
char aa = 'A';
char bb = 'B', cc ='C';
char kk = '가' , nn = '나';
String ss = "한글자 이상 가능";
System.out.println("소괄호 묶지 않고 :char(A)+char(B)+char(C) ="+aa+bb+cc);
//문자열의 연산이 이루어짐
System.out.println("소괄호 묶어서 : (char(A)+char(B)+char(C)) ="+(aa+bb+cc));
//연산자의 우선순위의 적용으로 인해 아스키코드화 되어 연산됨.
System.out.println("소괄호 묶어서 : (char(A)+char(B)+char(C)+string(한글자이상가능)) ="+(aa+bb+cc+ss));
// 연산 순서 : aa+bb => aa+bb+cc => aa+bb+cc+ss => 문자열 +aa+bb+cc+ss
//char를 int로 출력 (타입 캐스팅:명시적 형변환)
System.out.println("타입캐스팅 :(int)char(A)+(int)char(B)+(int)char(C) ="+(int)aa+(int)bb+(int)cc);
System.out.printf("char 테스트 : (int)aa = %d , bb = %s , (int)kk = %d , nn = %s \n" ,(int) aa, bb, (int)cc, ss);
//System.out.printf("char 테스트 : aa = %d , bb = %s , kk = %d , nn = %s \n" , aa, bb, cc, ss); //Error
//int 를 char 로 출력 (타입 캐스팅 : 명시적 형변환)
int ii = 66;
System.out.println("타입캐스팅 :(char)int(66)="+(char)ii);
형변환은 다음번에 자세히 다뤄보겠다.
'Developer > JAVA' 카테고리의 다른 글
JAVA, 진수와 Interger 메서드 , String 메서드 (2) | 2024.07.21 |
---|---|
JAVA , 자동 형변환과 강제 형변환 (0) | 2024.07.19 |
JAVA , 값의 치환 / 기본자료형의 wrapper Class / 언더플로우 오버플로우 (0) | 2024.07.19 |
JAVA , 자바 파일의 구성 - 프로젝트 만들기 (0) | 2024.07.18 |
JAVA, JAVA의 시작.환경 설정 (2) | 2024.07.17 |