20230613

DONGDONG_JU·2023년 6월 13일
0

자바

목록 보기
14/16

cmd로 출력해보기

bin까지의 경로만 cmd에 복사하기

-매번 bin폴더로 이동해서 실행시켜야함. 귀찮음!

▶ java -cp {path} fullpathname
cp: classPath || path: bin폴더,기준위치 || fullpathname:클래스파일이름

1.cd\ 로 제일루트파일로가기
2. java -cp {기준경로} 실행할파일 입력


제어자

-클래스,변수,메서드의 선언부에 사용되어 부가적인 의미를 부여한다.
-제어자는 크게 접근 제어자와 그 외의 제어자로 나뉜다.
-하나의 대상에 여러 개의 제어자를 조합해서 사용할 수 있으나, 접근제어자는 단 하나만 사용할 수 있다.

JNI
-JAVA NATIVE INTERFACE

▶접근제어자: public protected default private
▶그 외 : static final abstract translent synchronized volatile strictfp

static

final

-parent2 클래스-

package chap07;

//public final class Parent2 {    //자식을 가질수 없는 마지막 자손클래스
	public class Parent2 { 	
	String name;
	
	Parent2(String name){
		this.name = name;  //자식클래스 오류남. 매개변수가 있는, 인스턴스 생성불가
		System.out.println("Parent 인스턴스 생성");
	}
	
	//final void methodA() {
	void methodA() {
		System.out.println("Parent 클래스 methodA()");
	}
	

}

-child2 클래스-

public class Child2 extends Parent2 {
	
	String gender;
	
	Child2(String name, String gender){
		super(name);
		this.gender = gender;
		System.out.println("Child 인스턴스 생성");
	}
	
	void methodA() {
		super.methodA();  //숨겨진 부모클래스의 methodA 출력
		System.out.println("Child 클래스 methodA()");
	}

}

-Cicle2클래스-

public class Circle2 {
	
	static final double Pi = 3.141592;
	//static final double Pi;  //static final 변수는 반드시 선언과 동시에 초기화 해주어야 한다.
	final int radius;
	
	static {
		//Circle2.Pi = 3.141592;
	}
	
	Circle2(int radius){
		this.radius = 1234;
	}
	
	double getArea() {
		final double result;
		result = this.radius * Circle2.Pi;
		
		return result;
	}
	

}

출력 -Ex5클래스-

public class Ex5 {

	public static void main(String[] args) {
		Circle2 circle = new Circle2(7);
		
		System.out.println("pi: "+circle.Pi);
		//circle.Pi = 3.14;    final 써두면 못바꿈
		
		System.out.println("radius: "+circle.radius);
		//circle.radius = 3;
	}

}


접근제어자(access modifier)

-멤버 또는 클래스에 사용되어, 외부로부터의 접근을 제한한다.

접근 제어자가 사용될 수 있는곳 - 클래스,멤버변수,메서드,생성자

▶private - 같은 클래스 내에서만 접근이 가능하다.
▶default - 같은 패키지 내에서만 접근이 가능하다. //접근제어자를 안쓰면 default
▶protected - 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.
▶public - 접근 제한이 전혀 없다.

-접근제어자를 사용하는이유-

▶외부로부터 데이터를 보호하기 위해서
▶외부에는 불필요한, 내부적으로만 사용되는, 부분을 감추기 위해서

-parent클래스-

package chap07.packageA;

public class Parent  {
	
	private int num1;
	int num2;
	protected int num3;
	public int num4;
	
	public Parent(int num1, int num2, int num3, int num4){
		this.num1 = num1;
		this.num2 = num2;
		this.num3 = num3;
		this.num4 = num4;
	}
	
	protected int getNum1() {
		return this.num1;
	}
	
	public int getNum2() {
		return this.num2;
	}
	
	

}

-child클래스-

package chap07.packageB;

import chap07.packageA.Parent;

public class Child extends Parent {
	
	int result;
	
	public Child(int num1, int num2, int num3, int num4){
		super(num1,num2,num3,num4);
	}
	
	public int getResult() {
		this.result = this.num3 + this.num4;   
		this.result += this.getNum1();
		this.result += this.getNum2();
		
		
		return this.result;
	}

}

//부모의num1은 private라서 못씀
//num2는 default라서 자기 패키지안에서만 쓸수있음

-출력하는 Ex6클래스-

package chap07;

import chap07.packageB.Child;

public class Ex6 {

	public static void main(String[] args) {
		//chap07.packageB.child 클래스의 인스턴스를 생성하고 result값을 가져오는 코드를 생성하세요.
		//만약 안된다면 문제가 무엇인지 찾고 해결하세요.
		//가장 제한적인 방법
		
		Child c1 = new Child(1,2,3,4);
		
		
		System.out.println("result값: "+c1.getResult());
		

	}

}


접근 제어자를 이용한 정보은닉


생성자의 접근 제어자

-일반적으로 생성자의 접근 제어자는 클래스의 접근 제어자와 일치한다.
-생성자에 접근 제어자를 사용함으로써 인스턴스의 생성을 제한할 수 있다.

필드의값 설정 - setter
필드의값 반환 - getter

제어자의 조합

package chap07;

public class Circle5 {
	
	
	static Circle5 circle;   //자기자신타입의 래퍼런스, static
	static final double Pi = 3.141592;
	private int radius;
	
	private Circle5(int radius){
		this.setRadius(radius);
	}
	
	static Circle5 getCircle5(int radius) {
		
		if(Circle5.circle == null) {
			Circle5.circle = new Circle5(radius);
		}else {
			Circle5.circle.setRadius(radius);
		}
		return Circle5.circle;
	}
	
	void setRadius(int radius) {
		if(radius >0) {
			
			this.radius = radius;
		}else {
			this.radius = 1;
		}
	}
	
	int getRadius() {
		return this.radius;
	}
	
	double getCirclecumferance() {
		return this.radius * 2 * Circle5.Pi;
	}
	
	double getArea() {
		return this.radius * this.radius * Circle5.Pi;
	}
	
}

-Ex10-

package chap07;

public class Ex10 {

	public static void main(String[] args) {
		Circle5 c1,c2,c3,c4;
		
		c1=Circle5.getCircle5(3);
		System.out.println("area: "+c1.getArea());
		System.out.println("Circlecumferance: "+c1.getCirclecumferance());

		c2=Circle5.getCircle5(4);
		System.out.println("area: "+c2.getArea());
		System.out.println("Circlecumferance: "+c2.getCirclecumferance());
		
		c3=Circle5.getCircle5(5);
		System.out.println("area: "+c3.getArea());
		System.out.println("Circlecumferance: "+c3.getCirclecumferance());
		
		c4=Circle5.getCircle5(6);
		System.out.println("area: "+c4.getArea());
		System.out.println("Circlecumferance: "+c4.getCirclecumferance());
		
		System.out.println("==================");
		System.out.println("c1 == c2 : "+(c1 == c2));
		System.out.println("c2 == c3 : "+(c2 == c3));
		System.out.println("c3 == c4 : "+(c3 == c4));

	}

}

profile
웹개발자로 취업하고싶어 공부중인 HDJ 입니다

0개의 댓글