고래씌
[JAVA] 7-1. 클래스(Class) 본문
+ : public
- : private
# : protected
~ : default(package)
- 클래스 실습 예제
package com.kh.example.practice1.model.vo;
public class Member {
// 필드부
private String memberId;
private String memberPwd;
private String memberName;
private int age;
private char gender;
private String phone;
private String email;
// 생성자부
// + Member()
public Member () {
}
// 메소드부
public void changeName(String name) {
memberName = name;
}
public String printName() {
return memberName;
}
}
package com.kh.example.practice1.run;
import com.kh.example.practice1.model.vo.Member;
public class Run {
public static void main(String[] args) {
Member student = new Member();
student.changeName("abcd");
System.out.println(student.printName());
}
}
1. 클래스
- 클래스 선언 구문에 사용가능한 접근제한자 : public, default
- public으로 선언을 해야 다른 패키지에서 접근이 가능
- default로 설정한 경우 같은 패키지에서만 접근 가능
=> 하지만, 클래스 안에 여러개의 클래스가 있을 순 있지만, public 클래스는 단 한개만 존재하여야 한다!
package com.kh.chap03_class.model.vo;
public class Product { // 클래스 선언부
// 필드부
// 상품명, 상품가격, 브랜드
private String pName;
private int price;
private String brand;
// 생성자부
public Product() {
}
// public void Product () (X) void 붙은 것은 메소드부이다!
// 메소드부 (set/get) + information
public void setPrice(int price) {
this.price = price;
}
public void setBrand(String brand) {
this.brand = brand;
}
public void setpName(String pName) {
this.pName = pName;
}
// 모든 필드값을 출력해주는 information 메소드
public void information() {
System.out.println("상품명 : " + pName + ", 가격 : " + price + "원, 브랜드 : " +brand );
}
}
package com.kh.chap03_class.run;
import com.kh.chap03_class.model.vo.Product;
public class Run {
public static void main(String[] args) {
Product p = new Product();
p.setpName("갤럭시 s20");
p.setPrice(600000);
p.setBrand("삼성");
Product p2 = new Product();
p2.setpName("z플립5");
p2.setPrice(1000000);
p2.setBrand("삼성");
p.information();
p2.information();
}
}
2. 전역변수, 지역변수
1) 변수 구분
▶ 전역변수 : 클래스 영역에 바로 선언하는 변수 → 클래스 내에서면 어디서든 사용 가능
▶ 지역변수 : 클래스 영역 내의 특정 중괄호 영역에 선언한 변수(선언한 영역에서만 사용 가능)
ex) 메소드 영역, if문 영역, for문 영역...
2) 전역변수(가지로 구분됨)
- 필드 == 인스턴스 변수 == 멤버변수
▶ 생성시점 : new 연산자를 통해 해당 객체가 생성하는 순간 메모리 영역에 할당.
▶ 소멸시점 : 객체 소멸시 필드도 함께 소멸
- static 변수 == 클래스변수 : static 이라는 예약어가 붙어있냐 아니냐에 따라 필드냐, static 변수냐로 구분됨
ex) private static int global; ☞ static 변수
private int global; ☞ static 변수 X
▶ 생성시점 : 프로그램 실행과 동시에 메모리영역(static 영역)에 할당
▶ 소멸시점 : 프로그램이 종료될 때 소멸
=> 자주 사용하는 변수는 static 변수로 만들어주는 것이 좋음!
3) 지역변수
▶ 생성시점 : 프로그램을 실행하다가 특정 중괄호 구역을 만났을 때 메모리 영역에 할당(stack)
▶ 소멸시점 : 중괄호 구역이 끝났을 때 소멸
package com.kh.chap04_field.model.vo;
public class FieldTest1 {
// 변수 선언위치에 따른 구분(전역변수, 지역변수)
// 전역변수(필드)
private int global;
public void test(int num) {
// 매개변수 ==> 지역변수
// 지역변수(메소드 영역 내에 생성) => 지역변수에는 접근제한자를 붙일 수 없다.
int local = 100; // 지역변수에는 항상 값을 초기화 시켜줘야 한다.
if(true) {
int a = 0; // 지역변수 // a => 값을 초기화 해두지 않으면 에러가 발생.
System.out.println(a); // 0
}// int a 소멸;
System.out.println(global); // 에러발생 X . 전역변수로 new 연산자를 통해 메모리 영역에 할당을 해줘서
System.out.println(num); // 에러발생 X .
// 반드시 매개변수로 넘겨줘야지만 매개변수를 호출할 수 있는데 run 클래스에서 값을 넣어서 호출하기 때문. 매개변수에 항상 값이 들어간 상태이기 때문
System.out.println(local); // 값을 초기화해두지 않으면 에러가 발생.
}
}
package com.kh.chap04_field.run;
import com.kh.chap04_field.model.vo.FieldTest1;
public class Run {
public static void main(String[] args) {
FieldTest1 ft = new FieldTest1(); // -> global 전역변수가 할당
ft.test(100); // test 메소드 호출시 매개변수로 100값을 전달함(지역변수 num, local 생성)
// 메소드 종료시 num, local 소멸
}
}
System.out.println(global);
=> 필드에 값을 초기화하지 않아도 에러가 발생하지 않는 이유
필드의 생성시점은 객체의 생성시점과 동일하며, 객체생성시 초기화 되진 않은 필드들은 JVM이 자동으로 기본값을 대입해 줬기 때문에 항상 값이 들어가 있다.
System.out.println(num);
=> num에는 반드시 어떤 값이든 들어가 있기 때문
3. 접근제한자
(+) public => 어디서든 접근 가능(같은패키지 + 다른패키지)
(#) proteted => 같은패키지에서만 접근 가능. 단, "상속"구조라면 다른패키지에서도 가능
(~) default => 오직 같은 패키지에서만 접근 가능
(-) private => 오직 해당 클래스에서만 접근 가능
위에서부터 아래로 내려갈수록 접근할 수 있는 범위가 좁아진다.
public > proteted > default > private
package com.kh.chap04_field.model.vo;
public class FieldTest2 {
public String pub = "public";
protected String pro = "protected";
String df = "default";
private String pri = "private";
}
package com.kh.chap04_field.run;
import com.kh.chap04_field.model.vo.FieldTest1;
import com.kh.chap04_field.model.vo.FieldTest2;
public class Run {
public static void main(String[] args) {
FieldTest2 ft2 = new FieldTest2();
// public -> 어디서든 가능
System.out.println(ft2.pub);
//protected -> 같은패키지에서만 접근가능
System.out.println(ft2.pro); // 다른 패키지에 있어서 에러 발생 protected.
// default -> 같은패키지에서만 접근가능
System.out.println(ft2.df); // 에러 발생
// private
System.out.println(ft2.pri); // 에러 발생
}
}
package com.kh.chap04_field.model.vo;
public class Test {
public static void main(String[] args) {
FieldTest2 ft2 = new FieldTest2();
System.out.println(ft2.pub);
System.out.println(ft2.pro); // 같은 패키지 내부에 있어서 접근 가능. protected
System.out.println(ft2.df);
System.out.println(ft2.pri); // 에러 발생
}
}
4. static변수(클래스변수)와 상수필드(static final)
1) static 변수(클래스 변수)
- static "공유"의 개념이 강함 => 프로그램 실행과 동시에 메모리 영역에 데이터를 공유를 해서 쓰자!
- 자주 사용되는 변수, 메소드를 statice으로 선언함
▶ 생성시점 : 프로그램 실행과 동시에 메모리의 static 영역에 할당됨 => 객체를 생성하지 않아도 할당됨.
▶ 소멸시점 : 프로그램 종료시
2) 상수필드
public static final 자료형 변수명 = 값;
한번 지정된 값을 고정해서 사용하기 때문에 무조건 초기화를 해줘야 함.
☞ static : 공유의 개념
final : 상수의 개념
값이 변경되서는 안되는 고정적인 값을 메모리상에 올려두고 공유하면서 사용할 목적으로 사용함
★ 상수필드명은 항상 모든 글자가 대문자
package com.kh.chap04_field.model.vo;
// static변수(클래스변수)와 상수필드(static final)
public class FieldTest3 {
// 접근제한자 [예약어] 자료형 변수명;
public static int num = 100;
public static final int NUM=9;
public static void test() {
System.out.println("안녕");
}
}
package com.kh.chap04_field.run;
import com.kh.chap04_field.model.vo.FieldTest1;
import com.kh.chap04_field.model.vo.FieldTest2;
import com.kh.chap04_field.model.vo.FieldTest3;
public class Run {
public static void main(String[] args) {
FieldTest3 ft3 = new FieldTest3();
System.out.println(Math.E);
// System.out.println(FieldTest3.test());
FieldTest3.test();
}
}
5. 클래스 실습 예제
package com.kh.example.practice3.model.vo;
public class Circle {
private static final double PI = 3.14;
private static int radius = 1;
public Circle() {
}
public void incrementRadius() {
radius++;
}
public void getAreaOfCircle() { // 둘레
// 2 * 파이 * 반지름
System.out.println(2 * radius * PI);
}
public void getSizeOfCircle() { // 넓이
// 반지름 * 반지름 * 파이
System.out.println(2 * radius * PI);
}
}
package com.kh.example.practice3.run;
import com.kh.example.practice3.model.vo.Circle;
public class Run {
public static void main(String[] args) {
Circle cc = new Circle();
cc.getAreaOfCircle(); // 둘레
cc.getSizeOfCircle(); // 넓이
cc.incrementRadius();
cc.getAreaOfCircle(); // 둘레
cc.getSizeOfCircle(); // 넓이
}
}
'JAVA > JAVA 기초' 카테고리의 다른 글
[JAVA] 7-3. 메소드(Method) (0) | 2023.10.12 |
---|---|
[JAVA] 7-2. 생성자 (0) | 2023.10.12 |
[JAVA] 배열까지 종합문제 (0) | 2023.10.12 |
[JAVA] 7. 객체(추상화, 캡슐화) (0) | 2023.10.11 |
[JAVA] 6. 2차원 배열 (0) | 2023.10.11 |