JAVA์˜ ์ •์„ (ch 7) (1)

Du-Hyeon, Kimยท2023๋…„ 7์›” 19์ผ
0

JAVA

๋ชฉ๋ก ๋ณด๊ธฐ
8/11
post-thumbnail

๐Ÿ’ป OOPs - 2


๐Ÿฒ ์ƒ์†

-> ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ˜•ํƒœ

class Parent{ }
class Child **extends Parent** {
	//..
}

Parent : ์กฐ์ƒ ํด๋ž˜์Šค
Child : ์ž์† ํด๋ž˜์Šค

class Parent{ 
	int age;
}
class Child **extends Parent** {
	void play() { }
}

<์ƒ์†>

  • ์ž์† ํด๋ž˜์Šค๋Š” ์กฐ์ƒ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๋ฉค๋ฒ„๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.
    (๋‹จ, ์ƒ์„ฑ์ž์™€ ์ดˆ๊ธฐํ™” ๋ธ”๋Ÿญ์€ ์ƒ์†๋˜์ง€ ์•Š๋Š”๋‹ค.)
  • ์ž์† ํด๋ž˜์Šค์˜ ๋งด๋ฒ„ ๊ฐœ์ˆ˜๋Š” ์กฐ์ƒ ํด๋ž˜์Šค๋ณด๋‹ค ํ•ญ์ƒ ๊ฐ™๊ฑฐ๋‚˜ ๋งŽ๋‹ค.

๐Ÿฒ ํด๋ž˜์Šค ๊ฐ„ ๊ด€๊ณ„ - ํฌํ•จ๊ด€๊ณ„(composite)

ํด๋ž˜์Šค ๋‚ด ๋ณ€์ˆ˜๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ

class Circle {
	Point c = new Point();
	//Circle ํด๋ž˜์Šค๊ฐ€ Point ํด๋ž˜์Šค compositeํ•จ
	int r;
}

์ƒ์† vs ํฌํ•จ

์ƒ์†: ํฐ ๋ถ„๋ฅ˜ ์•ˆ์— ํฌํ•จ๋œ ์š”์†Œ์ด๋ฉด ์ƒ์†์„ ์ด์šฉ
ex) ์Šค๋งˆํŠธ ํ‹ฐ๋น„๋Š” ํ‹ฐ๋น„๋‹ค. (~์€ ~์ด๋‹ค.)
ํฌํ•จ: ํด๋ž˜์Šค์˜ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ํฌํ•จ๋˜๋ฉด ์ด์šฉ
ex) ์›์€ ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. (~์€ ~์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.)

๐Ÿฒ ๋‹จ์ผ ์ƒ์†(single inheritance)

C++์˜ ๊ฒฝ์šฐ ๋‹ค์ค‘ ์ƒ์† ๊ฐ€๋Šฅ

  • ํ—ˆ๋‚˜, ์กฐ์ƒ ํด๋ž˜์Šค์˜ ๋งค์„œ๋“œ ์ด๋ฆ„ ์ค‘๋ณต ๋˜๋Š” ํด๋ž˜์Šค๊ฐ„ ๊ด€๊ณ„ ๋ณต์žก์„ฑ ๋“ฑ์— ์˜ํ•ด
    JAVA๋Š” ๋‹จ์ผ ์ƒ์†์˜ ๋‹จ์ ์„ ๊ฐ์ˆ˜ํ•˜๊ณ  ๋‹จ์ผ ์ƒ์†๋งŒ์ด ๊ฐ€๋Šฅํ•จ!!!
  • ๋ชจ๋“  class์˜ ์กฐ์ƒ ํด๋ž˜์Šค๋Š” Object class์ž„.
  • ์šฐ๋ฆฌ๊ฐ€ equals(), toString()๊ณผ ๊ฐ™์€ ๋งค์„œ๋“œ๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ชจ๋“  ํด๋ž˜์Šค๊ฐ€ ์ž๋™์œผ๋กœ Object class์— ์ƒ์†๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
class Tv{
	//...
}

class Tv extend Object{
	//...
}

๐Ÿฒ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(overriding)

ํด๋ž˜์Šค๋ฅผ ์ƒ์† ๋ฐ›์•˜์„ ๋•Œ,
์กฐ์ƒ ํด๋ž˜์Šค์˜ ๋งค์„œ๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด,
์ž์† ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์œผ๋กœ ๋งค์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ˆ˜์ •์‹œํ‚จ๋‹ค.

์ด๋–„! overriding์ด ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด์ด์žˆ๋‹ค.

  1. ์กฐ์ƒ ํด๋ž˜์Šค ๋งค์„œ๋“œ์™€ ์ด๋ฆ„ / ๋งค๊ฐœ๋ณ€์ˆ˜ / ๋ฐ˜ํ™˜ํƒ€์ž… ๋ชจ๋‘ ๋™์ผํ•ด์•ผ ๋จ
  2. ์ ‘๊ทผ ์ œ์–ด์ž๋Š” ์กฐ์ƒ ํด๋ž˜์Šค์˜ ๋งค์„œ๋“œ๋ณด๋‹ค ์ข์€ ๋ฒ”์œ„๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
    public > protected > (default) > private(๊ฐ€์žฅ ์ข์Œ)
  3. ์กฐ์ƒ ํด๋ž˜์Šค์˜ ๋งค์„œ๋“œ๋ณด๋‹ค ๋งŽ์€ ์ˆ˜์˜ ์˜ˆ์™ธ ์„ ์–ธํ•  ์ˆ˜ ์—†๋‹ค.
overloadingoverriding
์ด๋ฆ„ ๊ฐ™๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜ ๋‹ค๋ฆ„(new method)์ด๋ฆ„ ๊ฐ™๊ฒŒ ์ž์† ํด๋ž˜์Šค์—์„œ ๋ฎ์–ด์”€(modify)

๐Ÿฒ super ์ฐธ์กฐ๋ณ€์ˆ˜

์กฐ์ƒ๊ณผ ์ž์†์˜ ๋ณ€์ˆ˜๋ช…์ด ๊ฐ™์„ ๋•Œ, ์กฐ์ƒ์˜ ํด๋ž˜์Šค๋ฅผ super๋กœ ํ‘œ๊ธฐ

thissuper
ํด๋ž˜์Šค ๋‚ด ๋ณ€์ˆ˜์™€ ์ง€์—ญ๋ณ€์ˆ˜๊ฐ„ ๋™์ผ์ด๋ฆ„ ๊ตฌ๋ถ„์กฐ์ƒ ๋ณ€์ˆ˜์™€ ์ž์† ๋ณ€์ˆ˜๊ฐ„ ๋™์ผ ์ด๋ฆ„ ๊ตฌ๋ถ„
class Ex7_2 {
	public static void main(String args[]) {
		Child c = new Child();
		c.method();
	}
}

class Parent { int x=10; }

class Child extends Parent {
	int x=20;

	void method() {
		System.out.println("x=" + x);
		System.out.println("this.x=" + x);
		// this.x๋กœ ํ‘œ์‹œํ•˜๋ฉด ๋” ์ •ํ™•ํ•จ!!
		System.out.println("super.x="+ super.x);
	}
}

๐Ÿฒ super() / this()

this()

๊ฐ™์€ ํด๋ž˜์Šค์˜ ์˜ค๋ฒ„๋กœ๋”ฉ๋œ ๋‹ค๋ฅธ ์ƒ์„ฑ์ž ํ˜ธ์ถœํ•  ๋–„ ์‚ฌ์šฉ

super()

์กฐ์ƒ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ํ˜ธ์ถœ์— ์‚ฌ์šฉ

ํด๋ž˜์Šค์˜ ์ƒ์†์—๋Š” ์ƒ์„ฑ์ž, ์ดˆ๊ธฐํ™” ๋ธ”๋Ÿญ์€ ์ƒ์†๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

public class Ex7_4 {
	public static void main(String[] args) {
		Point3D p = new Point3D(1, 2, 3);
		System.out.println("x=" + p.x + ",y=" + p.y + ",z=" + p.z);
	}
}

class Point {
	int x, y;

	Point(int x, int y) {	//์กฐ์ƒ ํด๋ž˜์Šค ์ƒ์„ฑ์žฅ
		this.x = x;
		this.y = y;
	}
}

class Point3D extends Point {
	int z;

	Point3D(int x, int y, int z) {
		super(x, y); // Point(int x, int y) ์ƒ์„ฑ์ž ํ˜ธ์ถœ
		this.z = z;
	}
}

๐Ÿฒ ํŒจํ‚ค์ง€(package)

ํŒจ์บ์ง€๋Š” ํด๋ž˜์Šค์˜ ๋ฌถ์Œ

ํด๋ž˜์Šค๋Š” ์ด๋ฆ„์ด ๊ฐ™๋”๋ผ๋„ ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•จ
๋”ฐ๋ผ์„œ, ์ž‘์—…์ž๊ฐ€ ๋™์ผ ํด๋ž˜์Šค๋ช…์˜ ์ถฉ๋Œ์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•จ

ex)
java.lang.String
java ํŒจํ‚ค์ง€ > lang ํŒจํ‚ค์ง€ > String.class ํด๋ž˜์Šค

ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ํŒŒ์ผ(.class)์ธ ๊ฒƒ๊ณผ ๊ฐ™์ด ํŒจํ‚ค์ง€๋Š” ๋ฌผ๋ฆฌ์ ์œผ๋กœ ํ•˜๋‚˜์˜ ๋””๋ ‰ํ† ๋ฆฌ(directory)์ด๋‹ค.

๐Ÿฒ ํŒจํ‚ค์ง€ ์„ ์–ธ

๋ฐ˜๋“œ์‹œ! ์†Œ์ŠคํŒŒ์ผ ์ฃผ์„๊ณผ ๊ณต๋ฐฑ์„ ์ œ์™ธํ•œ ์ฒซ ๋ฒˆ์จฐ ๋ฌธ์žฅ์ด์—ฌ์•ผ ํ•จ

package com.codechobo.book;

public class PackageTest {

	public static void main(String[] args) {
		System.out.println("Hello World!");
	}
}

console ํ˜ธ์ถœ์„ ๋ณด๋ฉด ํ™•์‹คํ•œ ๊ด€๊ณ„ ํ™•์ธ ๊ฐ€๋Šฅ

default package directory

pacakge directory and class

๐Ÿฒ ํด๋ž˜์Šค ํŒจ์Šค(class path)

  • JVM์€ ํŒจํ‚ค์ง€๊ฐ€ ํฌํ•จ๋˜ ๋ฃจํŠธ path๊ฐ€ classpath์— ์ถ”๊ฐ€๋˜์–ด ์žˆ์–ด์•ผ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋•Œ
    .;C:\jdk1.8\work
    ๋ฅผ CLASSPATH ์‹œ์Šคํ…œ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ์ถ”๊ฐ€์‹œํ‚ค๋Š”๋ฐ,
    .;์€ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๋„ ํด๋ž˜์ŠคํŒจ์Šค์— ํฌํ•จ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

๐Ÿฒ import ๋ฌธ

import ํŒจํ‚ค์ง€๋ช….ํด๋ž˜์Šค๋ช…;
or
import ํŒจํ‚ค์ง€๋ช….*

์ด๋•Œ *๋กœ ํŒจํ‚ค์ง€ ๋‚ด ๋ชจ๋“  class๋ฅผ ํฌํ•จ์‹œํ‚ค๋ฉด,
์ปดํŒŒ์ผ๋Ÿฌ๋Š” linking์—์„œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด์ง€ ๋ชฐ๋ผ๋„ ์‹คํ–‰ํŒŒ์ผ์—์„œ๋Š” ์„ฑ๋Šฅ์ฐจ์ด๋Š” ์—†๋‹ค.

??Classpath๋ž‘ import ๊ด€๊ณ„๊ฐ€ ์•„์ง ์ •ํ™•ํ•˜์ง€ ์•Š๋‹ค.

์ •ํ™•ํžˆ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ํด๋ž˜์Šค์˜ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด
๊ทธ ํŒจํ‚ค์ง€์˜ ์ƒ์œ„ ๋ฃจํŠธ๋ฅผ classpath์— ์ถ”๊ฐ€์‹œ์ผœ์•ผ JVM์—์„œ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 7์›” 19์ผ

์ข‹์€ ๊ธ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ