자바8일차

달달한스위츠·2024년 2월 13일

자바배우기

목록 보기
8/43

오늘의 코드

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

0개의 댓글