오늘의 코드
package edu.java.class02;
public class ClassMain02 {
public static void main(String[] args) {
// 기본 생성자를 사용하여 MyRectangle 클래스의 인스턴스 생성
MyRectangle rect1 = new MyRectangle();
rect1.width = 3.0; // rect1.width 변수에 3.0을 저장
rect1.height = 4.0; // rect1.height 변수에 4.0을 저장
System.out.println("넓이 : " + rect1.width);
System.out.println("높이 : " + rect1.height);
System.out.println("면적 : " + rect1.calcArea());
System.out.println("================");
// 매개변수가 있는 생성자를 호출하여 인스턴스 생성
MyRectangle rect2 = new MyRectangle(3.0, 4.0);
System.out.println("넓이 : " + rect2.width);
System.out.println("높이 : " + rect2.height);
System.out.println("면적 : " + rect2.calcArea());
} // end main()
} // end ClassMain02
package edu.java.class02;
// 클래스 :
// 상태(속성, 성질) : 맴버 변수(field, property)
// 기능 - 메소드
// 생성자(constructor) - 맴버 변수들을 초기화
// - 클래스 이름과 동인
// - 매개변수는 있을 수 도 있고, 없을 수도 있음
// - 클래스를 작성할 때 생성자를 하나도 정의하지 않은 경우,
// 자바 컴파일러가 기본 생성자를 자동으로 만들어 중.
// - 생성자를 하나라도 정의한 경우에는 , 자동으로 기본 생성자를 만들지 않음
public class MyRectangle {
// 맴버 변수
double width; // 사각형의 가로
double height; // 사각형의 세로
// 기본 생성자
public MyRectangle() {
}
// 매개변수가 있는 생성자
public MyRectangle(double width, double height) {
this.width = width;
this.height = height;
// this : 자기 자신(MyRectangle 클래스)
}
// 메소드
public double calcArea() {
return width * height;
}
} // end MyRectangle
package edu.java.access01;
// 접근 제한 수식어(Access Modifier)
// 1. 종류 : private, (package), protected, public
// 2. 기능 :
// 1) 멤버 변수에 대한 접근 권한을 설정
// 2) 메소드에 대한 접근 권한을 설정
// 3) 생성자에 대한 접근 권한을 설정
// 4) 클래스에 대한 접근 권한을 설정(package, public만 사용 가능)
// 3. 종류 및 의미 :
// 1) private : 선언(정의)된 클래스 안에서 직접 접근(사용)이 가능
// 2) (package) : 같은 패키지에 있는 클래스에서 직접 접근(사용)이 가능
// 3) protected : 같은 패키지에 있거나 상속받는 클래스들에서 직접 접근(사용)이
// 가능
// 4) public : 어디서든지 직접 접근(사용) 가능
// 4. 사용 범위 : private < (package) < protected < public
public class AccessMain01 {
public static void main(String[] args) {
Test01 t1 = new Test01();
// t1.n1 = 100; // 컴파일 에러
// private 멤버 변수는 다른 클래스에서 직접 접근이 불가능(보이지 않음)
// -> 값을 변경하거나 읽어오지 못함
t1.n2 = 200; // (package) : 같은 패키지에 있기 때문에 접근 가능
t1.n3 = 300; // protected : 같은 패키지에 있기 때문에 접근 가능
t1.n4 = 400; // public : 어디서든지 접근 가능
t1.printFields();
} // end main()
} // end AccessMain01
package edu.java.access01;
public class Test01 {
// 멤버 변수
private int n1; // 클래스 내부에서 사용
int n2; // (package) 내부에서 사용
protected int n3; // 같은 패키지 혹은 상속받은 클래스들에서 사용
public int n4; // 어디서든지 사용
// 메소드
public void printFields() {
System.out.println("n1 = " + n1);
System.out.println("n2 = " + n2);
System.out.println("n3 = " + n3);
System.out.println("n4 = " + n4);
} // display()
} // end Test01
package edu.java.access02;
import java.util.Scanner;
import edu.java.access01.Test01;
public class AccessMain02 {
public static void main(String[] args) {
// Ctrl + Shift + o : 자동 import
Scanner sc = new Scanner(System.in);
Test01 t1 = new Test01();
// t1.n1 = 100; // private : 접근 불가
// t1.n2 = 200; // (package) : 다른 패키지에 있으므로 접근 불가
// t1.n3 = 300; // protected : 다른 패키지고, 상속받지 않았으므로 접근 불가
t1.n4 = 400; // public : 어디서든지 접근 가능
t1.printFields();
} // end main()
} // end AccessMain02
package edu.java.access03;
// 캡슐화(encapsulation)
// - 클래스를 설계할 때, 맴버 변수(필드)들을 private으로 선언하여
// 외부 클래스에서 맴버 변수들을 직접 접근해서 읽거나 쓰지 못하게 하는 것
// - 필요한 경우 한해서 public 메소드를 정의하여
// private 멤버 변수를 간접적으로 읽거나 쓰는 것을 가능하게 할 수 있음
public class AccessMain03 {
public static void main(String[] args) {
MyNumber num = new MyNumber(100);
System.out.println("number = " + num.getNumber());
num.setNumber(10);
System.out.println("number = " + num.getNumber());
} // end main()
} // end AccessMain03
package edu.java.access03;
public class MyNumber {
// 멤버 변수
public int number;
// 생성자
public MyNumber(int number) {
this.number = number;
}
// private 멤버 변수를 간접적으로 읽어오는 메소드 - getter
public int getNumber() {
return number;
}
// private 멤버 변수를 간접적으로 변경하는 메소드 - setter
public void setNumber(int number) {
this.number = number;
}
}
package edu.java.access04;
public class AccessMain04 {
public static void main(String[] args) {
// 객체 생성 및 데이터 저장 방식 1
// 처음 만들때 미리 넣어 버리는 방식
Contact c1 = new Contact(0, "유재석", "010-2222-2222" , "you@gmail.com");
System.out.println(c1.toString());
System.out.println();
// 전화번호를 변경하라!
c1.setPhone("010-4444-5555");
System.out.println(c1.toString());
// 객체 생성 및 데이터 저장 방식 2
// 왔다 갔다 하는 방식
Contact c2 = new Contact();
System.out.println(c2.toString());
c2.setNo(1);
c2.setName("박명수");
c2.setPhone("010-3333-4444");
c2.setEmail("park@gmail.com");
System.out.println(c2.toString());
// 3명의 연락처 정보를 배열로 묶음
Contact[] contacts = new Contact[3];
// 유재석의 정보를 contacts[0]에 저장
contacts[0] = c1;
// 박명수의 정보를 contact[1]에 저장
contacts[1] = c2;
// 아이유의 정보를 contact[2]에 저장
contacts[2] = new Contact(2, "아이유", "010-2222-3333", "iu@gmail.com");
for(Contact c : contacts) {
System.out.println(c);
// System.out.println(c.getNo());
// System.out.println(c.getName());
// System.out.println(c.getPhone());
// System.out.println(c.getEmail());
}
} // end main()
} // AccessMain04
package edu.java.access04;
// 데이터 클래스(번호, 이름, 전화번호, 이메일)
public class Contact {
// 멤버 변수
private int no;
private String name;
private String phone;
private String email;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Contact() {
}
public Contact(int no, String name, String phone, String email) {
this.no = no;
this.name = name;
this.phone = phone;
this.email = email;
}
@Override
public String toString() {
return "Contact [no=" + no + ", name=" + name + ", phone=" + phone + ", email=" + email + "]";
}
}
공부를 위한 코드 아래
package edu.java.access05;
// 클래스의 접근 제한 수식어 : public, (package)
// 1. public class : 어디서든지 인스턴스 생성이 가능한 클래스
// 2. (package) class : 같은 패키지에 속한 클래스에서만 인스턴스 생성이 가능
// 주의사항 :
// - public class의 이름은 반드시 java 파일의 이름과 같아야 함!
// - 하나의 java 파일에 여러 개의 클래스를 정의하는 것은 가능하지만,
// 파일 내에 public class는 오직 하나만 있어야 함
public class AccessMain05 {
public static void main(String[] args) {
TestPublic test1 = new TestPublic();
System.out.println(test1);
TestPackage test2 = new TestPackage();
System.out.println(test2);
} // end main()
} // AccessMain05
package edu.java.access05;
// package 내에서만 인스턴스 생성 가능
class TestPackage {
}
package edu.java.access05;
public class TestPublic {
}
class Test2 {
}
class Test3 {
}
많이는 안씀^^
package edu.java.access06;
import edu.java.access05.TestPublic;
public class AccessMain06 {
public static void main(String[] args) {
TestPublic test1 = new TestPublic();
// TestPackage test2 = new TestPackage();
// 다른 패키지에 속한 클래스에서는 인스턴스 생성 불가능
} // end main()
} // end AccessMain06