20230612

DONGDONG_JU·2023년 6월 12일
0

자바

목록 보기
13/16

객체지향 예제풀기

예제1

-class1 클래스-

	public class Class1 {
	
	int num;
	
	void methodA() {
		System.out.println("Class1 methodA()");
	}

}

-test1클래스-

	public class Test1 {

	public static void main(String[] args) {
		
		Class1 class1;   //타입 Class1
		class1 = new Class1();
		
		System.out.println("num: "+class1.num);
		class1.methodA();
		
		class1.num=1234;
		System.out.println("num: "+class1.num);
 
	}

}


예제2

-time클래스-

public class Time {
	
	int hour;
	int minute;
	int second;
	
	String getCurrentTime() {
		return this.hour + "시 "+this.minute+"분 "+this.second+"초";     //this는 자기자신객체
	}

}

-test2 클래스-

public class Test2 {

	public static void main(String[] args) {
		Time time;
		time = new Time();
		
		System.out.println(time.getCurrentTime());
		
		time.hour=10;
		time.minute=38;
		time.second=22;
		
		System.out.println(time.getCurrentTime());
		

	}

}

-test3 클래스-

public class Test3 {

	public static void main(String[] args) {
		
		/*
		int [] arr = new int[5];    //정수배열
		
		for(int num: arr) {     //여러개의 값을 가지는 배열이나, 컬렉션에서 씀
			System.out.println(arr[num]);
		}
		*/
		
		//Time [] arr = new Time[5];    //인스턴스의 주소값  5개의 주소값 저장 가능, 레퍼런스 배열
		Time [] arr = {new Time(),new Time(),new Time(),new Time(),new Time()};    
		
		arr[0].hour=11; arr[0].minute=01; arr[0].second=10;
		arr[1].hour=12; arr[1].minute=01; arr[1].second=10;
		arr[2].hour=13; arr[2].minute=01; arr[2].second=10;
		arr[3].hour=14; arr[3].minute=01; arr[3].second=10;
		arr[4].hour=15; arr[4].minute=01; arr[4].second=10;

				
		
		//Time [] arr = new Time[5];
		
		/*
		arr[0]=new Time();
		arr[1]=new Time();
		arr[2]=new Time();
		arr[3]=new Time();
		arr[4]=new Time();
		*/
		
		for(Time time : arr) {     //앞에는 타입
			System.out.println(time.getCurrentTime());
		}
		
		/*
	
		for(int i=0; i<arr.length; i++) {
			System.out.println(arr[i]);
		}
		*/
		
		

	}

}


예제3

-class2 클래스-

public class Class2 {
	
	
	static int classVar;   //클래스 변수 될려면 static 붙이기   0값으로 초기화
	int instanceVar;   //0값으로 초기화
	
	
	void methodA() {
		int methodVar;
		methodVar = 10;
		
		System.out.println("methodVar: "+methodVar);
	}

}

-Test4클래스-

public class Test4 {

	public static void main(String[] args) {
		
		
		
		System.out.println("classVar: "+Class2.classVar);
		Class2.classVar =1000;
		
		System.out.println("classVar: "+Class2.classVar);
		
		Class2 c1,c2;
		c1 = new Class2();
		c2 = new Class2();
		
		System.out.println("c1.instancVar: "+c1.instanceVar);
		System.out.println("c2.instancVar: "+c2.instanceVar);
		
		c1.instanceVar = 1234;
		c2.instanceVar = 5678;
		
		System.out.println("c1.instancVar: "+c1.instanceVar);
		System.out.println("c2.instancVar: "+c2.instanceVar);
		
		System.out.println("c1.classVar: "+c1.classVar);
		System.out.println("c2.classVar: "+c2.classVar);  
		
		c1.methodA();  //method변수

	}

}


예제4

-class3클래스-

	public class Class3 {
	
	static int classVar = 1234;
	int instanceVar = 5678;                  //바로 초기화하는거 별로 안좋음
	
	static void classMethodA() {
		System.out.println("classMethodA()");
	}
	
	static void classMethodB() {
		System.out.println("classVar: "+classVar);
		Class3.classMethodA();
	}
	
	void instanceclassMethodA() {
		System.out.println("instanceclassMethodA()");
	}
	
	void instanceclassMethodB() {
		System.out.println("classVar: "+classVar);
		Class3.classMethodA();
		System.out.println("instancVar: "+this.instanceVar);
		this.instanceclassMethodA();
	}

}

-test5클래스-

	public class Test5 {

	public static void main(String[] args) {
		//ClassmethodB(), instancemethodB()
		//를 호출하는 문장을 작성하세요.
		
		Class3.classMethodB();
		
		Class3 c3 = new Class3();
		c3.instanceclassMethodB();

	}

}


예제5

-time클래스 활용-

-Test6 클래스-

public class Test6 {

	void callByValue(int num) {
		num *= 2;
		System.out.println("callByValue() num : "+num);
	}
	
	void callByReference(Time [] arr) {
		//Time 클래스 배열을 입력으로 받아 오는 타임 객체의 값을 0시 0분 0초로 초기화하는 코드를 작성하세요.
		//Time [] arr = new Time[]{new Time()};
		
		System.out.println("\n callReference() arr : ");
		for(int i=0; i<arr.length; i++) {
			arr[i].hour=0;arr[i].minute=0;arr[i].second=0;
			System.out.println(arr[i].getCurrentTime());
			
			
		}
		
	}
	
	public static void main(String[] args) {
		
		int num =4;
		
		
		//callByValue(num)을 호출하는 문장을 작성하세요.
		
		Test6 t6 = new Test6();
		
		System.out.println("CallByValue() 호출전: "+num);
		t6.callByValue(num);
		System.out.println("CallByValue() 호출후: "+num);
		
		//Time 클래스 배열을 입력으로 callByReference()메서드를 호출하는 문장을 작성해보세요.
		 Time [] arr = {new Time(),new Time(),new Time()};    
			
			arr[0].hour=11; arr[0].minute=01; arr[0].second=10;
			arr[1].hour=12; arr[1].minute=01; arr[1].second=10;
			arr[2].hour=13; arr[2].minute=01; arr[2].second=10;
			
		System.out.println("\nCallByReference() 호출전 arr: ");	
		for(Time time : arr) {     //앞에는 타입
				System.out.println(time.getCurrentTime());
		}	
			
		t6.callByReference(arr);
		
		System.out.println("\nCallByReference() 호출후 arr: ");
		for(Time time : arr) {     //앞에는 타입
			System.out.println(time.getCurrentTime());
		}
		
		
	}

}


예제6

-class4 클래스-

	public class Class4 {
	int add(int a, int b) {
		return a + b;
	}
	double add(double a, double b) {
		return a + b;
	}
	int add(int [] arr) {
		int result = 0;
		
		for(int num : arr) {
			result += num;
		}
		return result;
	}
}

-Test7클래스-

	public class Test7 {

	public static void main(String[] args) {
		
		Class4 class4 = new Class4();
		
		System.out.println(class4.add(10,20));
		System.out.println(class4.add(10.5,20.5));
		System.out.println(class4.add(new int[] {10,20,30,40,50}));

	}

}


예제7-생성자

-class5 클래스-

public class Class5 {

	String name;
	String gender;
	int age;      //3개는 필수 입력사항
	
	String hobby; //선택 입력사항
	 
	Class5(){
		
	}

	Class5(String name,String gender, int age){
		this(name,gender,age,null);
	}
	Class5(String name,String gender, int age,String hobby){
		this.name = name;
		this.gender = gender;
		this.age = age;
		this.hobby = hobby;
	}
	
	//생성자 3개
	
	

	public String toString() {
		return this.name + " / "+this.gender+" / "+this.age+" / "+this.hobby;
	}
	
}

-test8 클래스-

	public class Test8 {

	public static void main(String[] args) {
		Class5 c1,c2,c3;
		c1 = new Class5();
		c2 = new Class5("손흥민","male",31);
		c3 = new Class5("류현진","mael",37,"야구");
		
		System.out.println(c1.toString());
		System.out.println(c2.toString());
		System.out.println(c3.toString());

	}

}


예제8-변수의 초기화

-class6클래스-

	public class Class6 {
	
	static int classVar;
	int instanceVar;
	
	static {
		Class6.classVar = 1234;
	}

	Class6(int instanceVar){
		this.instanceVar = instanceVar;
	}
}

-Test9클래스-

public class Test9 {

	public static void main(String[] args) {
		
		System.out.println(Class6.classVar);
		
		Class6 c1,c2;
		c1 = new Class6(5678);
		c2 = new Class6(3579);
		
		System.out.println(c1.instanceVar);
		System.out.println(c2.instanceVar);

	}

}


상속

-parents 클래스-

	public class Parent {
	
	int num1;
	
	Parent(){
		num1 = 100;
	}
	
	void methodA() {
		System.out.println("methodA()");
	}

}

-child 클래스-

	public class Child extends Parent {

	int num2;
	Other other;
	
	Child(){
		num2 = 200;
		other = new Other();
	}
	
	void methodB() {
		System.out.println("methodB()");
	}
}

-other 클래스-

public class Other {

	int num3;
	
	Other(){
		num3 = 300;
	}
	
	void methodC() {
		System.out.println("methodC()");
	}
}

-Test10 클래스-

public class Test10 {

	public static void main(String[] args) {
		Child child = new Child();
		
		System.out.println("num1: "+child.num1);
		child.methodA();
		System.out.println("num2: "+child.num2);
		child.methodB();
		System.out.println("num3: "+child.other.num3);
		child.other.methodC();

	}

}

-parent클래스-

public class Parent {
	
	int num1;
	
	Parent(){
		num1 = 100;
	}
	
	void methodA() {
		System.out.println("Parent methodA()");
	}

}

-child2클래스-

public class Child2 extends Parent {

	int num1;
	
	Child2(){
		num1 = 200;
	}
	
	void methodA() {
		System.out.println("Child methodA()");
		System.out.println("Child num1: "+ num1);
	}
	
	void methodB() {
		System.out.println("Parent num1: "+ super.num1);   //super 부모의 숨겨진 num, 부모의 메서드 num1호출
	}
}

-Test11클래스-

public class Test11 {

	public static void main(String[] args) {
		
		Child2 child2 = new Child2();
		
		System.out.println("num1: "+child2.num1);
		child2.methodA();
		child2.methodB();

	}

}


-parent2 클래스-

public class Parent2 {
	int num1;
	
	//자식인스턴스가 생성될때 항상 부모의 인스턴스가 먼저 생성된다.
	//단, 자동 생성되는 부모 인스턴스는 매개변수가 없는 생성자를 이용여 생성된다.
	
	Parent2(){
		this.num1 = 100;
		System.out.println("Parent 클래스의 인스턴스 생성");
	}
}

-child3 클래스-

public class Child3 extends Parent2 {

	int num2;
	
	Child3(){
		this.num2 = 100;
		System.out.println("Child3 클래스의 인스턴스 생성");
	}
	
}

-test12 클래스-

public class Test12 {

	public static void main(String[] args) {
		
		Child3 child3 = new Child3();
		
		

	}

}


-parent3클래스-

	public class Parent3 {
	int num1;
	
	Parent3(int num1){
		this.num1 = num1;
		System.out.println("Parent 클래스의 인스턴스 생성");
	}
}

-child4 클래스-

	public class Child4 extends Parent3 {
	
	int num2;
	
	Child4(int num1, int num2){
		super(num1);
		this.num2 = num2;
		System.out.println("Child3 클래스의 인스턴스 생성");
	}

}

-test13클래스-

public class Test13 {

	public static void main(String[] args) {
		
		Child4 child4 = new Child4(123,456);
		System.out.println("num1: "+child4.num1);
		System.out.println("num2: "+child4.num2);

	}

}


패키지(package)

-서로 관련된 클래스와 인터페이스의 묶음.
-클래스가 물리적으로 클래스파일*.class 인 것처럼, 패키지는 물리적으로 폴더이다. 패키지는 서브패키지를 가질 수 있으며, '.'으로 구분한다.
-클래스의 실제이름은 패키지명이 포함된 것이다.
-rt.jar는 java API의 기본 클래스들을 압축한 파일
-패키지는 소스파일에 첫 번째 문장(주석제외)으로 단 한번 선언한다.
-하나의 소스파일에 둘 이상의 클래스가 포함된 경우, 모두 같은 패키지에 속하게 된다.(하나의 소스파일에 단 하나의 public클래스만 허용한다.)
-모든 클래스는 하나의 패키지에 속하며, 패키지가 선언되지 않은 클래스는 자동적으로 이름없는(unnamed)패키지에 속하게 된다.
-패키지가 없는 클래스 있을수 있지만, 다른클래스에서 사용불가능

import문

-사용할 클래스가 속한 패키지를 지정하는데 사용.
-import문을 사용하면 클래스를 사용할 때 패키지명을 생략할 수 있다.
-java.lang패키지의 클래스는 import하지 않고도 사용할 수 있다.
-import문은 패키지문과 클래스선언의 사이에 선언한다.
-import 패키지명.클래스명;
-import문은 컴파일 시에 처리되므로 프로그램의 성능에 아무런 영향을 미치지 않는다.
-이름이 같은 클래스가 속한 두 패키지를 import할 때는 클래스 앞에 패키지명을 붙여줘야 한다.

이렇게 쓰면 보기 편함!
com.lg.dept.project.className 순서로!

-jar = Java Archive

참고문헌- 자바의정석 (남궁성)

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

0개의 댓글