[새싹] 현대IT&E 231019 기록 - JAVA 7~11장

최정윤·2023년 10월 20일
0

새싹

목록 보기
3/67
post-custom-banner

Git에 업로드하기

  • cd (해당경로)
  • git init // .git 폴더 생성
  • git add .
  • git commit -m "커밋메세지"
  • git remote add origin 리퍼지토리 주소
  • git pull origin main
  • git push origin main

맥에서 숨긴파일 보기

  • Cmd + Shift + .

객체지향 언어의 특징

  • 캡슐화
  • 상속
  • 다형성

7장. 클래스 내부 구성 요소

7.3 생성자

  • 반드시 클래스명과 동일한 이름으로 지어야 한다.
  • 클래스는 무조건 생성자가 필요하다.

생성자가 없는 클래스를 만들면 컴파일러가 입력 매개 변수가 없는 기본 생성자를 추가해준다.

class A{
	int m;
    void work(){ ... }
    A() {
    
    }
}

oop5/PointTest.java

package oop5;

public class PointTest {
	public static void main(String[] args) {
//		Point2D pt1 = new Point2D(100, 200);
//		System.out.println("x = " + pt1.x);
//		System.out.println("y = " + pt1.y);
		
//		Point2D pt2 = new Point2D();
//		System.out.println("x = " + pt2.x);
//		System.out.println("y = " + pt2.y);
		
//		Point3D pt3 = new Point3D(1000, 2000, 3000);
//		System.out.println("x = " + pt3.x);
//		System.out.println("y = " + pt3.y);
//		System.out.println("z = " + pt3.z);
		
		Point3D pt4 = new Point3D();
		System.out.println("x = " + pt4.x);
		System.out.println("y = " + pt4.y);
		System.out.println("z = " + pt4.z);
	}

}

oop5/Point2D.java

package oop5;

public class Point2D {
	int x;
	int y;
	
	public Point2D() {
//		this.x = 1;
//		this.y = 2;
		this(1,2);
		System.out.println("Point2D() 수행");
	}
	
	public Point2D(int x, int y) {
		this.x = x; // this를 통해 필드에 있는 x로 접근
		this.y = y;
		System.out.println("Point2D(x,y) 수행");
	}
}

oop5/Point3D.java

package oop5;

public class Point3D extends Point2D{
	int z;
	
	public Point3D(int x, int y, int z) {
		super(x, y);
		this.z = z;
		System.out.println("Point3D(x,y,z) 수행");
	}
	
	public Point3D() {
		this(10, 20, 30);
		System.out.println("Point3D() 수행");
	}
}

8장. 클래스 외부 구성 요소

8.1 패키지와 임포트

jar파일 export하기

file > export > java > jar file > next > 대상파일선택 > 경로 및 파일 이름 설정 > finish

mylib/src/exam.lib/Dice.java

package exam.lib;

public class Dice {
//	public void roll() { // 자바 콘솔에서만 기능을 수행할 수 있다.
//		System.out.println((int)(Math.random() * 6 + 1));
//	}
	public int roll2() { // 안드로이드나 웹에서도 사용할 수 있다.
		return (int)(Math.random() * 6 + 1);
	}
}

jar파일 사용하기

프로젝트 우클릭 > properties > java build path > classpath > add external jars > jar파일 선택 > apply and close

project1/src/imp/DiceTest.java

package imp;

import exam.lib.Dice;

public class DiceTest {
	public static void main(String[] args) {
		Dice dice = new Dice();
		System.out.println(dice.roll2());

	}

}

9장. 자바 제어자1

9.1 접근 지정자

  • access modifier: 클래스 내부 < 패키지내부 < 상속관계 < 관계없음
  • private: O < X < X < X
  • default: O < O < X < X
  • protected: O < O < O < X
  • public: O < O < O < O

opp6/AccountTest.java

package oop6;

public class AccountTest {

	public static void main(String[] args) {
		Account a1 = new Account(10000);
		System.out.println(a1);
		Account a2 = new Account(10000);
		System.out.println(a2);
		Account a3 = new Account(10000);
		System.out.println(a3);

	}
}

opp6/Account.java

package oop6;

public class Account {
	int money1;
	int money2;
	
	public Account(int money) {
		this.money1 += money;
		this.money2 += money;
	}
	
	@Override
	public String toString() {
		return "money1: " + money1 + ", money2:" + money2;
	}
}

9.2 static 제어자

oop7/Singleton.java

package oop7;

public class Singleton {
	public static Singleton singleton = null;
	
	int score;
	private Singleton() {
		// 1. 생성자를 private
		// 2. 자기자신을 참조하는 변수를 static으로 선언
	}
	
	public static Singleton getInstance() {
		if (singleton == null) {
			singleton = new Singleton();
		}
		return singleton;
	}
//	1. 생성자를 private
//	2. 자기자신을 참조하는 변수를 static으로 선언
//	3. 처음 1회만 인스턴스를 생성하고 리턴하는 메소드 직 
}

oop7/SingletonTest.java

package oop7;

public class SingletonTest {
	public static void main(String[] args) {
		Singleton s1 = Singleton.getInstance();
		System.out.println(s1);
		System.out.println(s1.getClass());
		System.out.println(s1.hashCode());
		
		Singleton s2 = Singleton.getInstance();
		System.out.println(s2);
		System.out.println(s2.getClass());
		System.out.println(s2.hashCode());
	}
}

10장. 클래스의 상속과 다형성

10.1 클래스 상속의 개념과 문법적 특징

10.1.2 상속의 장점

  • 상속으로 코드의 중복성이 제거되었다.

10.1.3 상속 문법

  • 클래스를 상속할 때 extends키워드를 사용하며, 클래스명 다음에 extends 부모 클래스를 표기한다.
  • 자바의 클래스는 다중 상속이 불가능한데, 다중 상속은 부모 클래스가 2개 이상일 때를 말한다.

10.2 객체의 타입 변환

Typecasting_1.java

package pt1;

class A {}
class B extends A {}
class C extends B {}
class D extends B {}

public class Typecasting_1 {
	public static void main(String[] args) {
		A ac = (A) new C();
		B bc = (B) new C();
		
		B bb = new B();
		A a = (A) bb;
		
		A aa = new A();
		
		A ab = new B();
		B b = (B) ab;
		
		B bd = new D();
		D d = (D) bd;
		
		A ad = new D();
		B b1 = (B) ad;
		D d1 = (D) ad;

	}

}

Typecasting_2.java

package pt2;

class A {
	int m = 3;
	void abc() {
		System.out.println("A 클래스");
	}
}

class B extends A{
	int n = 4;
	void bcd() {
		System.out.println("B 클래스");
	}
}

public class Typecasting_2 {
	public static void main(String[] args) {
		A aa = new A();
		System.out.println(aa.m);
		aa.abc();
		
		B bb = new B();
		System.out.println(bb.m);
		System.out.println(bb.n);
		bb.abc();
		bb.bcd();
		
		A ab = new B();
		System.out.println(ab.m);
		ab.abc();
	}
}

Typecasting_3.java

package pt3;

class A{}
class B extends A{}

public class Typecasting_3 {
	public static void main(String[] args) {
		// instance of
		A aa = new A();
		A ab = new B();
		
		System.out.println(ab instanceof A);
		
		System.out.println(aa instanceof B);
		System.out.println(ab instanceof B);
		
		if(aa instanceof B) {
			B b = (B) aa;
			System.out.println("aa를 B로 캐스팅했습니다.");
		} else {
			System.out.println("aa는 B타입으로 캐스팅이 불가능!!!");
		}
		if(ab instanceof B) {
			B b = (B) ab;
			System.out.println("ab를 B로 캐스팅했습니다.");
		} else {
			System.out.println("ab는 B 타입으로 캐스팅이 불가능!!!");
		}
		if("안녕" instanceof String) {
			System.out.println("\"안녕\"은 String 클래스입니다.");
		}
	}
}

11장. 자바 제어자2

final 제어자

  • final 제어자는 필드, 지역 변수, 메서드, 클래스 앞에 위치할 수 있다.
  • final 변수는 한 번 대입된 값을 수정할 수 없다.
  • 한번 대입된 최종값이 되는 셈이다.

abstract 제어자

  • abstract는 추상메서드이고 abstract이 붙은 클래스를 추상 클래스라 한다.
  • 아직 무슨 기능을 정의할지 정해지지 않은 미완성 메서드이다.

12장. 추상 클래스와 인터페이스

  • 인터페이스에서는 public abstract를 굳이 명시해주지 않아도 알아서 인식한다.

oop9/HyundaiTV.java

package oop9;

public class HyundaiTV {
	public void powerOn() {
		System.out.println("HyundaiTV: 전원을 켭니다.");
	}
	public void powerOff() {
		System.out.println("HyundaiTV: 전원을 끕니다.");
	}
	public void ChannelUp() {
		System.out.println("HyundaiTV: 채널을 올립니다.");
	}
	public void ChannelDown() {
		System.out.println("HyundaiTV: 채널을 내립니다.");
	}
	public void soundUp() {
		System.out.println("HyundaiTV: 소리를 키웁니다.");
	}
	public void soundDown() {
		System.out.println("HyundaiTV: 전원을 줄입니다.");
	}
}

oop9/TVTest.java

package oop9;

public class TVTest {
	public static void main(String[] args) {
		TV tv = new HyundaiTV();
//		TV tv = new SamsungTV();
		tv.powerOn();
		tv.powerOff();
		tv.ChannelUp();
		tv.ChannelDown();
		tv.soundUp();
		tv.soundDown();
	}
}

oop9/TV.java

package oop9;

// 인터페이스에서는 public abstract를 굳이 명시해주지 않아도 알아서 인식한다.
public interface TV {
	public abstract void powerOn();
	public abstract void powerOff();
	public abstract void ChannelUp();
	public abstract void ChannelDown();
	public abstract void soundUp();
	public abstract void soundDown();
}

oop9/Speaker.java

package oop9;

public interface Speaker {
	public void soundUp();
	public void soundDown();
	
}

oop9/HarmanSpeaker.java

package oop9;

public class HarmanSpeaker implements Speaker{
	public void soundUp(){
		System.out.println("HarmanSpeaker: 소리를 키웁니다.");
	}
	public void soundDown() {
		System.out.println("HarmanSpeaker: 소리를 줄입니다.");
	}
}

oop9/OrangeSpeaker.java

package oop9;

public class OrangeSpeaker implements Speaker{
	public void soundUp(){
		System.out.println("OrangeSpeaker: 소리를 키웁니다.");
	}
	public void soundDown() {
		System.out.println("OrangeSpeaker: 소리를 줄입니다.");
	}
}

oop9/SamsungTV.java

package oop9;

public class SamsungTV implements TV{
//	private Speaker speaker = new OrangeSpeaker();
	private Speaker speaker;
	
	public void setSpeaker(Speaker speaker) {
		this.speaker = speaker;
	}
	
	public void powerOn(){
		System.out.println("SamsungTV: 전원을 켭니다.");
	}
	public void powerOff() {
		System.out.println("SamsungTV: 전원을 끕니다.");
	}
	public void ChannelUp() {
		System.out.println("SamsungTV: 채널을 올립니다.");
	}
	public void ChannelDown() {
		System.out.println("SamsungTV: 채널을 내립니다.");
	}
	public void soundUp() {
		if(speaker == null) {
		System.out.println("SamsungTV: 소리를 키웁니다.");
		} else {
			speaker.soundUp();
		}
	}
	public void soundDown() {
		if(speaker == null) {
		System.out.println("SamsungTV: 소리를 줄입니다.");
		} else {
			speaker.soundDown();
		}
	}

}

oop9/product.properties

tv = oop9.SamsungTV
speaker = oop9.HarmanSpeaker
// speaker = oop9.OrangeSpeaker
profile
개발 기록장
post-custom-banner

0개의 댓글