캡슐화 |
public class Student { [필드부] * 정보를 담는 부분 * 필드 == 멤버변수 == 클래스변수 * 접근제한자 자료형 필드이름; // 정보를 담을 수 있는 변수 선언 + private => 캡슐화 private String name; private int age; private char gender; // 생성자부 - 아직 안배움- // 메소드부 * 기능을 구현하는 부분 접근제한자 반환형 메소드식별자(매개변수) { 메소드를 호출하면 실행할 코드; } * public 접근제한자 : 메소드를 호출할 수 있는 범위를 제한해준다. * void 반환형 : 메소드의 결과값의 자료형을 지정해준다 void -> 돌려줄 값이 없다. 돌려줄 값이 있다면 돌려줄 값의 형태를 적어줌!! (자료형) * () 매개변수 : 메소드 호출 시 입력값으로 넣어주는 변수. 해당 메소드 실행중에만 사용 가능한 변수. 생략 가능 * method() 메소드식별자() // 데이터를 기록 및 수정하는 기능의 메소드 ㅣ setter 메소드 * 규칙 1. setter 메소드는 접근 가능하도록 만들어야 하기 때문에 public 접근 제한자를 이용 2. set필드명 으로 이름 짓되 낙타봉표기법(camelCase)을 지키도록 한다. ex) setName, setAge, setGender 3. 모든 필드에 대해서 전부 다 반드시!!! 작성을 해줘야 한다!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1☆☆☆ // 이름을 기록 및 수정할 수 있는 메소드 public void setName(String name) { this.name = name; //특정 영역 안에서는 해당 영역 안에 있는 지역변수 우선권이 있음 // this.를 붙이지 않으면 매개변수 name = 매개변수 name 이렇게 인식이 됨!! } public void setAge(int age) { this.age = age; } public void setGender(char gender) { this.gender = gender; } // 데이터를 반환해주는 기능의 메소드 : getter 메소드 * 1. getter메소드는 접근제한자 public을 사용한다. * 2. get필드명으로 짓되, 낙타봉표기법(camelCase)를 사용한다 * ex) getName, getAge, getGender * 3. 모든 필드에 대해서 다 작성해줘야한다!!! 반드시!!!!!!!!!! // 이름을 반환해주는 메소드 public String getName() { return this.name; // return 결과값 => 결과값을 돌려주겠다 } // 나이를 반환해주는 메소드 public int getAge() { return this.age; } // 성별을 반환해주는 메소드 public char getGender() { return this.gender; } // setter와 getter 메소드 다 만들어주면 캡슐화 끝!!!!!! //메소드 정리 public String information() { // return this.name, this.age, this.gender; // 결과값은 return당 한개여야한다!! return this.name + "님의 나이는 " + age + "살이고,성별은 " + gender + "입니다."; } |
public class Person {
// 사람의 인적 정보
// 주민번호, 이름, 나이, 성별, 휴대폰번호, 이메일주소
// [필드부]
// 필드 == 멤버변수 == 클래스변수 == 인스턴스변수
private String name;
private String personId;
private int age;
private char gender;
private String phone;
private String tiStory;
//[생성자부]
//[메소드부]
// setter 메소드들 : set필드명
public void setName(String name) {
this.name = name;
}
public void setPersonId(String personId) {
this.personId = personId;
}
public void setAge(int age) {
this.age = age;
}
public void setGender(char gender) {
this.gender = gender;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setTistory(String tiStory) {
this.tiStory = tiStory;
}
// getter 메소드 : get필드명()
public String getName() {
return this.name;
}
public String getPersonId() {
return this.personId;
}
public int getAge() {
return this.age;
}
public char getGender() {
return this.gender;
}
public String getPhone() {
return this.phone;
}
public String getTiStory() {
return this.tiStory;
}
public String information() {
return this.name + "님의 인적사항 \n주민번호 : " + this.personId + "\n나이 : " + this.age
+ "\n성별 : " + this.gender + "\n휴대폰번호 : " + this.phone +
"\n블로그 : " + this.tiStory;
}
import com.ullebulle.chap03.model.vo.Person;
import com.ullebulle.chap03.model.vo.Product;
public class Run {
public static void main(String[] args) {
// 클래스 == 내가 만든 나만의 자료형 (1.참조자료형, 2.주소값 저장, 3.여러 개의 자료형에 여러 개의 값을 보관 + 기능)
// == 사용자 정의 자료형
// person이라는 클래스를 통해 객체 생성
Person person = new Person(); // 인스턴스화(객체화)
person.setName("박머루");
person.setPersonId("940711-20000000");
person.setAge(29);
person.setGender('F');
person.setPhone("010-1234-5678");
person.setTistory("https://ullebulle-it.tistory.com/");
// => 값을 입력하지 않을 경우 기본값이 들어있다
// --> 기본형은 0, 0.0, 공백 / 참조형은 null
// 값 대입 => setter
System.out.println(person.information());
System.out.println(person); // person 객체가 있는 주소가 나옴
// com.ullebulle.chap03.model.vo.Person@6d06d69c
Product product = new Product();
product.setName("아이폰13");
product.setPrice(1380000);
// product.setBrand();
// => 필드 선언하면서 초기값을 넣어줬기 때문에 따로 값을 입력하지 않아도 출력이 된다.
System.out.println("");
System.out.println(product.getName());
System.out.println(product.getPrice());
System.out.println(product.getBrand());
System.out.println("\n" + product.information());
}
필드(field) |
필드(field) : 클래스를 구성하는 요소 중 하나! * 어떠한 데이터를 저장하기 위한 역할(변수!) * 클래스 내부지만 메소드 밖의 영역에 정의함!! * 변수 구분 * - 필드 : 클래스 영역에 바로 선언하는 변수!! * - 지역변수 : 클래스 영역 내에 특정한 구역{ } => 메소드, for문 등등.. 코드블럭 * for(int i = 0; 조건식; 증감식){ } =>초기식에 선언된 변수 i도 지역변수 * 1. 전역변수 * - 클래스 변수(static 변수) : static이라는 예약어가 붙은 변수! * 생성시점 : 프로그램 실행과 동시에 static 영역에 할당! * 소멸시점 : 프로그램이 종료될 때 * => 해당 객체가 생성되지 않더라도 무조건 프로그램 실행과 동시에 할당이 됨! * * - 멤버변수(인스턴스변수, 필드) * 생성시점 : new 키워드를 사용하면 해당 객체를 생성하는 순간 메모리 영역에 할당! => heap 영역 * 소멸시점 : 객체가 소멸될 때 => 가비지컬렉터 * 2. 지역변수 * 생성시점 : 특정한 구역{ } 실행 시 메모리 영역에 할당 => stack * 소멸시점 : 특정한 구역{ } 종료시 소멸 |
public class FieldTest1 {
//멤버변수(인스턴스변수, 필드) : 초기값(기본값)이 들어있기 때문에 초기화를 안해도 사용 가능
private int global;
//num 매개변수 => 지역변수에 포함됨
public void test(int num) {//test 메소드 시작
//지역변수를 사용해보자!
int local = 0; // 지역변수 : 초기화를 반드시 해줘야함!!
System.out.println(global); // 멤버변수, 필드
System.out.println(local); // 지역변수
System.out.println(num); // 매개변수(지역변수)
}//test 메소드 끝
필드에서 사용 가능한 접근제한자 4가지 |
* (+) public => 같은 프로젝트 내부에서 어디서든(같은 패키지, 다른 패키지 모두~~) 접근 가능하게 하고 싶다. * (#) protected => 같은 패키지면 무조건 접근 가능! * 다른 패키지면 상속구조인 클래스에서만 접근 가능하다. * 상속이라는 개념은 다다음시간에 다룰 것.. * (~) default => 오로지 같은 패키지에서만 접근 가능, 생략 가능 * (default 생략) String name; * (-) private => 오직 해당 클래스 안에서만 접근 가능 * => 위에서 아래로 내려갈수록 접근할 수 있는 범위가 좁아진다! * => +, #, ~, - : 클래스 다이어그램 표기 방법. |
클래스변수(static 변수) 와 상수필드(static필드)에 대하여 |
[표현법] 접근제한자 예약어(생략가능) 자료형 필드이름; public static String sta = "static 변수"; 생성시점 : 프로그램 실행과 동시에 메모리의 static 영역에 할당됨 소멸시점 : 프로그램 종료시 소멸됨 => 객체를 생성하지 않고 할당됨!!! static "공유"의 개념이 강하다! 프로그램 실행과 동시에 메모리영역에 공간을 만들어두고 그 안에 값을 공유해서 쓰자!! * 상수필드 * [표현법] * public static final 자료형 상수필드이름 = 값; * => 한 번 지정된 값을 고정해서 쓰겠다. 그래서 무조건 초기화 해줘야 됨!!!!!!!!!!!! * => public final static 예약어 순서는 상관 없음 * static : 공유의 개념(재사용성) * final : 한 번 지정해놓고 변경하지 않겠다(상수선언) * 값이 변경되어서는 안되는 고정적인 값을 메모리상(static)에 올려놓고 * (프로그램 시작과 동시에 메로리 영역에 할당, 값이 변하지도 않음) * 공유할 목적으로 사용' * 상수필드 이름도 반드시 항상 모두 대문자여야 한다@! |
메소드(method) |
* 메소드(Method) : 입력을 가지고 어떤 일을 수행한 다음에 결과물을 내놓는다!! * [표현법] 접근제한자 예약어(생략가능) 반환형 메소드식별자(매개변수의 자료형 매개변수식별자{ 수행할 코드; return 반환값; } * 생략 가능한 것 : 예약어, 매개변수, return문 부분(반환형이 void일 경우) * 반환형 : 반환할 값의 자료형 * 호출할 때 인자값 => 매개변수의 자료형과 갯수가 일치해야 한다 반드시!!!! * 한 번 정의해두고 필요할 때마다 호출해서 사용 가능 언제든!!!! |
// 1. 매개변수가 없고 반환값도 없는 메소드
public void method1() {
System.out.println("매개변수와 반환값 둘 다 없는 메소드");
int sum = 0;
for(int i = 1; i <= 10; i++) {
sum = sum + i;
}
System.out.println(sum);
}
// return;
// void 일 경우 return이 생략, JVM이 자동으로 만들어 줌!
// 2. 매개변수는 없고 반환값은 있는 메소드
public int method2() {
System.out.println("매개변수는 없고 반환값은 있는 메소드입니다.");
// 1에서부터 100까지의 랜덤값을 발생시켜 돌려주고싶다.
return (int)(Math.random() * 100) + 1;
}
// 3. 매개변수는 있고 반환값은 없는 메소드
public void method3(int num1, int num2) {
System.out.println("매개변수는 있고 반환값은 없는 메소드입니다.");
int min = 0;
int max = 0;
if(num1 < num2) {
max = num2;
min = num1;
} else {
max = num1;
min = num2;
}
System.out.println("최소값 : " + min + ", 최대값 : " + max);
}
//4. 매개변수도 있고 반환값도 있는 메소드
public int method4(int a, int b) {
System.out.println("매개변수도 있고 반환값도 있다.");
return a + b;
}
/*
* 반환형이 없는 메소드 : 출력문을 작성하는편
* 반환형이 있는 메소드 : 호출하는 부분에서 출력문을 작성
* => 보편적으로 약속
*/
'국비 > Java' 카테고리의 다른 글
[09-2] 실습문제 (클래스다이어그램, 배열) (0) | 2022.04.19 |
---|---|
[09-1] 객체 - 메소드, 오버로딩(overloading) (0) | 2022.04.19 |
[07-2] Java - 객체(Object) (0) | 2022.04.15 |
[07-1] Java - 배열, 배열복사 (0) | 2022.04.15 |
[06-2] Java - 배열(Array) (0) | 2022.04.14 |