Java์ ์ค๋ฒ๋ก๋ฉ ๋ฐ ์ฌ์ ์
์ถ์ฒ: Medium ์ด ๊ธฐ์ฌ์์๋ Java ์ธ์ด์ Overriding ๋ฐ Overloading ๋ฉ์๋์ ๋ํด ์์๋ด ๋๋ค. ์ด ๋ ์ฉ์ด๋ ์ข ์ข ์๋ก ํผ๋๋๊ธฐ ๋๋ฌธ์ ๊ฐ ๋ฐฉ๋ฒ์ ๋ชฉ์ ๊ณผ ์ ์ฉ ์ต์ ์ ๋ช ํํ๊ฒ ์ดํดํ๋ ๊ฒ์ด ์ข์ต๋๋ค.๊ณผ๋ถํ
๋์ผํ ํด๋์ค์์ ์ด๋ฆ์ ๊ฐ์ง๋ง ๋งค๊ฐ๋ณ์๊ฐ ๋ค๋ฅธ ๋ ๊ฐ ์ด์์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ Java์ ์ํผํด๋์ค์ ์๋ธํด๋์ค ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ค๋ฒ๋ก๋ฉ์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ์ ์ฌํ ์์ ์ ์ํํ๋ ์ฌ๋ฌ ๋ฉ์๋ ๋์ ๋จ์ผ ๋ฉ์๋๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ค๋ช ํด ๋ณด๊ฒ ์ต๋๋ค.public class MethodOverloading {
public static void main(String[] args){
MethodOverloading operation = new MethodOverloading();
operation.mod(12,4);
operation.mod(12.4,4.2);
}
void mod(double a, double b){
System.out.println(a % b);
}
void mod(int a, int b){
System.out.println(a % b);
}
}
์ด ์ฝ๋์์๋ ์์
๋ฉ์๋๊ฐ ์ค๋ฒ๋ก๋๋ฉ๋๋ค. ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๋ ๋ค๋ฅธ ์ ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํฉ๋๋ค. ๋ชจ๋ ์ ํ์ int ๋ฐ double ๋งค๊ฐ๋ณ์์ ๋ํด ๋ณ๋๋ก ๊ฒฐ์ ๋ฉ๋๋ค . ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด Operation.mod(12,4)๋ void.mod(int a, int b) ๋ฅผ ์คํ ํ๊ณ Operation.mod(12.4,4.2) ๋ void.mod(double a, double b)๋ฅผ ์คํํฉ๋๋ค .
์ฌ์ ์
Java์์๋ ์ํผํด๋์ค์ ํด๋น ํด๋์ค๋ฅผ ์์ํ๋ ์๋ธํด๋์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ฌํ ํ์ ํด๋์ค๋ ์์๋ฐ์ ์์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๊ณ ๋์ฒดํ ์ ์์ต๋๋ค. ์ด๋ Overriding ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. ์ด๋ ๋ค์ ์๋ฅผ ํตํด ๋ ์ ์ดํดํ ์ ์์ต๋๋ค.public class MethodOverriding {
public static void main(String[] args) {
Cat cat = new Cat();
cat.sound();
Bee bee = new Bee();
bee.sound();
}
}
class Animal {
void sound(){
System.out.println("Animal sounds");
}
}
class Cat extends Animal{
@Override
void sound() {
System.out.println("Cat : meow meow");
}
}
class Bee extends Animal{
@Override
void sound() {
System.out.println("Bee : buzz buzz");
}
}
์ด ์ฝ๋ ์์ ์์๋ Animal ์ด๋ผ๋ ์ํผํด๋์ค ์ ํด๋น ์ํผํด๋์ค์์ ์์๋๋ Cat ๋ฐ Bee ๋ผ๋ ํ์ ํด๋์ค๋ฅผ ๋ง๋ญ๋๋ค. ์ํผํด๋์ค์ ์ฌ์ด๋ ๋ฉ์๋๊ฐ ์ฌ์ ์๋ฉ๋๋ค. ์ฐธ๊ณ : ์ค๋ฒ๋ก๋๋ ๋ฉ์๋์ ๋ถ๋ฆฌ๋ ์ปดํ์ผ ๋จ๊ณ์์ ๋ฐ์ํฉ๋๋ค. ์ฌ์ ์๋ ๋ฉ์๋์ ๋ถ๋ฆฌ๋ ๋ฐํ์์ ๋ฐ์ํฉ๋๋ค.
๋น์ ์ด ๋ชฐ๋๋ 5๊ฐ์ง ์๋ฐ ๋ฉ์๋
์ถ์ฒ: Javarevisited Java ๊ฐ๋ฐ ์ํ๊ณ์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ๋ก๊ทธ๋จ์์ ๊ฐ์ ธ์ ์ฌ์ฉํ ์ ์๋ ๋ง์ ๋๊ตฌ๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ๋ด์ฅ ํด๋์ค์ ๋ฉ์๋๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ํ๋ก๊ทธ๋๋จธ์ ์์ ์ด ํฌ๊ฒ ๋จ์ํ๋๊ณ ์ฝ๋๋ฅผ ๋ ์ ์ดํดํ๊ณ ์์ฑํ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฐ๋ฐ์๋ ์ด์ ๋ํด ์์์ผ ํฉ๋๋ค. ๋ค์์ ๋งค์ฐ ๋๋ฌผ์ง๋ง ์์ ์ ๋งค์ฐ ์ ์ฉํ ์ ์๋ 5๊ฐ์ง Java ๋ฉ์๋์ ๋๋ค.1. ๊ฐ์์ ํํ
decrementExact()๋ ์ฃผ์ด์ง ์ธ์(์ซ์)๋ฅผ 1๋งํผ ๊ฐ์/๋นผ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ Math ํด๋์ค ์ ๊ธฐ๋ณธ Java ํจ์์ ๋๋ค . ์ด ํจ์๋ incrementExact() ํจ์ ์ ๋ฐ๋์ ๋๋ค . ์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง ์ธ์๊ฐ 11์ด๋ฉด ๊ฒฐ๊ณผ๋ 10์ ๋๋ค. ์ธ์๋ฅผ ๊ฐ์์์ผ ํด๋น ๋ฐ์ดํฐ ์ ํ์ด ์ค๋ฒํ๋ก๋๋ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋ ํนํ ํฐ ์ซ์์ ๊ฒฝ์ฐ ์ฃผ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด ํจ์์๋ ์ ์๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํต์ฌ๋ก :Math.decrementExact(number);
์:
System.out.println(Math.decrementExact(11));
// Output: 10
2.getAsDouble
getAsDouble()์ OptionalDouble ํด๋์ค ์ ์ํ๋ ๋ฉ์๋์ ๋๋ค . OptionalDouble ๊ฐ์ฒด๋ ์ ์ฌ์ ์ผ๋ก double ์ซ์๋ฅผ ๋ณด์ ํ ์ ์๋ ๊ฐ์ฒด์ ๋๋ค. ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด์ ์๋ double ๊ฐ์ ๋ํด ์์ ์ ์ํํ๊ฑฐ๋ double ๊ฐ์ด ์ ํ ํฌํจ๋์ง ์์์ ๋ํ๋ผ ์ ์์ต๋๋ค. getAsDouble() ์ ๊ทธ๋ฌํ ๋ฉ์๋ ์ค ํ๋์ด๋ฉฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ double ๊ฐ์ ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด NoSuchElementException ์ด ๋ฐ์ํฉ๋๋ค . ํต์ฌ๋ก :OptionalDoubleObject.getAsDouble();
์:
OptionalDouble num = OptionalDouble.of(15.0);
System.out.println(num.getAsDouble());
// Output: 15.0
3. ์ ๋ ์ ํ
absExact() ๋ฉ์๋๋ Math ํด๋์ค ์ abs() ํจ์ ์ ์ ์ฌํฉ๋๋ค . ์ซ์์ ์ ๋๊ฐ์ ๋ฐํํฉ๋๋ค. ์ด๋ ๋ถํธ์ ๊ด๊ณ์์ด ์ซ์์ ์์ ๊ฐ์ ๋๋ค. ์ ์ผํ ์ฐจ์ด์ ์ ๋ฐ์ดํฐ ์ ํ( int ๋๋ long ) ์ผ๋ก ์ ํํ๊ฒ ํํ๋๋ ๊ฒฝ์ฐ์๋ง ์ด ์์ ์ ์ํํ๋ค๋ ๊ฒ์ ๋๋ค . ๋ฐํ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์๋ ๋ฐ์ดํฐ ์ ํ์ ์ด๊ณผํ๋ ๊ฒฝ์ฐ ArithmeticException์ด ๋ฐ์ํฉ๋๋ค . ํต์ฌ๋ก :Math.absExact(number);
์:
System.out.println(Math.absExact(-11));
// Output: 11
4.๋๋๋ค
endWith() ๋ ์ฃผ์ด์ง ๋ฌธ์์ด์ด ๋งค๊ฐ๋ณ์์ ํน์ ์ ๋ฏธ์ฌ(๋ ๋จ์ด/๋ฌธ์์ด)๋ก ๋๋๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ถ์ธ ๊ฐ์ ๋ฐํํ๋ ๋ด์ฅ ๋ฌธ์์ด ๋ฉ์๋์ ๋๋ค. ์ด ๋ฉ์๋๋ ๋ง์ ๊ฐ๋ฐ์์๊ฒ ์ต์ํ startWith() ๋ฉ์๋ ์ ๋ฐ๋์ ๋๋ค . ํต์ฌ๋ก :String.endsWith(String suffix);
์:
String phrase = "I like bananas";
System.out.println(phrase.endsWith("bananas")); // true
System.out.println(phrase.endsWith("Tandrew")); // false
/* Output:
true
false
*/
5. ๋ถํ ์ ๋๊ทธ๋
DivideUnsigned() ๋ฉ์๋๋ ๋ ์ซ์๋ฅผ ๋๋๊ณ ๋๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ ์ ์๋ Integer ํด๋์ค ์ ๋ฉ์๋์ ๋๋ค . ๋ถํธ ์๋ ์ ์๋ ์ผ๋ฐ ๋ถํธ ์๋ ์ ์์ ๋น๊ตํ์ฌ ์์๋ง ๋ํ๋ผ ์ ์์ต๋๋ค. ๋ถํธ ์๋ ์ ์์ ๋ถํธ ์๋ ์ ์ ๋ชจ๋ ๋ฒ์ ๋ด์์ ๋์ผํ ์์ ์ซ์๋ฅผ ๊ฐ์ต๋๋ค(๋ฒ์์ ํฌ๊ธฐ๋ 65,536๊ฐ์ ์ซ์์ ๋๋ค). ๊ทธ๋ฌ๋ ๋ถํธ ์๋ ์ ์๋ ์์๊ฐ ๋ ์ ์์ผ๋ฏ๋ก ์์ ๋ฒ์์ ์ต๋๊ฐ์ ์ผ๋ฐ ๋ถํธ ์๋ ์ ์์ ์ต๋๊ฐ๋ณด๋ค ํจ์ฌ ๋์ต๋๋ค. ์ด๋ฅผ ๋จ์ํํ๊ธฐ ์ํด ๋์ ๋ถํธ ์๋ ๋ฐ์ดํธ์ ๋ถํธ ์๋ ๋ฐ์ดํธ์ ์๋ฅผ ์ดํด๋ณผ ์ ์์ต๋๋ค. ๋ฐ์ดํธ์ ๋ฒ์๋ 256๊ฐ ์ซ์์ ๋๋ค. ์ผ๋ฐ ๋ฐ์ดํธ๋ -128๋ถํฐ 127๊น์ง์ ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ถํธ ์๋ ๋ฐ์ดํธ๋ 0๋ถํฐ 255๊น์ง์ ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํจ์๋ ์ ๊ท ๋๋๊ธฐ์ ์ ํํ ๋์ผํ๊ฒ ์๋ํฉ๋๋ค. ํต์ฌ๋ก :Integer.divideUnsigned(int dividend, int divisor);
์:
int dividend = 10;
int divisor = 5;
int quotient = Integer.divideUnsigned(dividend, divisor);
System.out.println(quotient);
// Output: 2
๊ฒฐ๋ก
๋ค์์ ์ด ๋ฌธ์์์ ์ค๋ช ํ ํจ์์ ๋ฉ์๋๋ฅผ ์์ฝํ ๊ฒ์ ๋๋ค.-
decrementExact - ์ฃผ์ด์ง ์ซ์๋ฅผ 1์ฉ ์ค์ด๊ฑฐ๋ ๋บ๋๋ค.
-
getAsDouble - OptionalDouble ํจ์ ์ ์ผ๋ถ๋ก , double ๊ฐ์ด ์๋ ์ซ์๋ฅผ ๋ฐํํ๊ฑฐ๋ ํด๋น ๊ฐ์ด ์์์ ๋ํ๋ ๋๋ค.
-
absExact - ์๋ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ํํ๋ ์ ์๋ ๊ฒฝ์ฐ ์ซ์์ ์ ๋๊ฐ์ ๋ฐํํฉ๋๋ค.
-
endWith() - ์ง์ ๋ ๋ฌธ์์ด์ ์ง์ ๋ ์ ๋ฏธ์ฌ๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ถ์ธ ๊ฐ์ ๋ฐํํฉ๋๋ค.
-
DivideUnsigned() - ์ผ๋ฐ ๋๋๊ธฐ๋ฅผ ์ํํ๊ณ ์ซ์๋ฅผ ๋๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
GO TO FULL VERSION