String str = "123" + 1; -> String str = "1231";
원하는타입 변수명 = 타입클래스.parse타입(str)
String str = String.valueOf(기본타입변수);
Outter: for(int i=0; i<10; i++){
for(int j=0; j<10; j++){
if(j==1){
break Outter;
}
}
}
Java Virtial Machine -> OS로부터 메모리 영역을 할당받는다. 무엇이 있는지 살펴보자.
String str1 = "123";
String str2 = "123";
String str1 = new String("123");
String str2 = new String("123");
System.out.println(str1.equals(str2));
public static void main(String[] args) {}
// main 메소드 호출할 때 String 배열을 생성하고, main 메소드에 argument로 전달된다.
// Subject.java
// 열거 타입 선언.
public enum Subject {
// 열거 상수 선언.
MATH,
MAGIC,
SOCIAL,
ENGLISH,
KOREAN
}
// Enum type 변수 선언
Subject today;
// 열거 상수 지정하기.
Subject tomorrow = Subject.MATH;
public class Person{}
class Alien{}
매개 변수의 개수를 모를 경우
int plus(int[] nums) {}
Method Overloading : 하나의 메소드 이름에 과하게 적재한다는 의미를 가진다.
int sum(int x, int y) {}
double sum(double x, double y) {}
sum(10.3, 10);
// double sum이 호출이 된다. -> 2번째 인자인 10이 int->double로 자동 타입 변환이 가능하기 때문이다.
Instance Member : 인스턴스 생성 후 사용할 수 있는 필드와 메소드, 객체에 소속된 멤버이다.
public class Person{
// 인스턴스 필드
int height;
// 인스턴스 메소드
void walk(){...}
}
Static Member : 클래스에 고정된 멤버 -> 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다.
public class Nike{
// Static Field
static String brandName = "Nike";
// Static Method
static String brandSell(){}
}
Instance Field vs Static Field
Instance Method vs Static Method
정의 : 전체 프로그램 내에서 단 하나의 객체만 만들도록 보장해야 하는 경우, 이 객체를 Singleton이라고 한다.
만드는 방법
public class Single{
// 2. 정적 필드를 선언하고 자신의 객체를 생성한다.
private static Single singleton = new Single();
// 1. 생성자 앞에 private을 붙인다.
private Single(){}
// 3. getInstance 선언하고 자기 자신을 리턴한다.
static Single getInstance(){
return singleton;
}
}
final : 초기값 저장되면 프로그램 실행 도중 수정이 불가능하다.
위의 두 가지 방법 말고는 final field를 수정할 수 없다.
static final : 각각의 의미를 분리해서 생각해보면 간단하다.
객체마다 저장할 필요가 없다.
사용하고자 하는 class 혹은 interface가 다른 package에 소속 -> import문으로 어디에 있는 패키지의 클래스와 인터페이스를 사용할건지 명시해준다.
중요한 점 : 상위 패키지 import -> 하위 패키지 전부 import하는 건 아니다.
import my.clothes.*;
import my.clothes.pants.*;
public : 외부 클래스가 자유롭게 사용 가능
protected : 같은 패키지의 모든 클래스, 자식 클래스, 다른 패키지의 자식 클래스만 사용 가능
default : 같은 패키지만 사용 가능 -> 따로 선어하지 않으면, 기본으로 default가 설정된다.
private : 외부에서 사용불가
기본 생성자의 접근 제한 -> 따로 생성자를 선언하지 않으면 class의 접근 제한을 따라간다.
class ChildClass extends ParentClass{ }
ParentClass와 ChildClass가 상속 관계에 있다고 하자.
자식 객체만 생성한다고 해도, 내부적으로는 부모 객체가 먼저 생성되고 자식 객체가 생성된다.
public class ChildClass{
public ChildClass(){
// 부모 클래스의 생성자
super();
// 부모 클래스의 생성자를 위와 같이 명시적으로 써놓지 않으면, 컴파일러가 자동으로 추가해준다.
}
}
final : 초기화되면 더이상 수정할 수 없다는 키워드이다.
Final Class
publid final class ClassName(){}
Final Method
public final void MethodName(){}
자동 타입 변환 : 부모타입 변수에 자식타입 객체를 대입하면 자식타입 객체도 부모타입과 동일한 취급을 받는다.
Child child = new Child();
Parent parent = child;
// parent, child는 동일한 객체를 가리킨다.
// Child 타입은 Parent 타입을 상속받는다.
Promotion이후 주의 사항
왜 필요할까? -> 다형성
OOP에 있어서 하나의 Action을 여러 방식으로 할 수 있게 해준다.
Field Polymophism
class Dormitory{
Bed leftBed = new Bed();
Bed rightBed = new Bed();
void jump(){
leftBed.spring();
rightBed.spring();
}
}
// 여기서, Bed를 각각 시몬스 침대와 장수돌침대로 교체할 것이다.
// Bed <- SimonsBed
// Bed <- StoneBed
Dormitory dormitory = new Dormitory();
dormitory.leftBed = new SimonsBed();
dormitory.rightBed = new StoneBed();
// 기존의 Bed -> spring() 메소드가 있다고 하자.
// SimonsBed와 StoneBed는 spring 메소드를 overriding하였기에, spring메소드를 호출하면 자식 객체들의 메소드가 호출이 된다.
Parent parent = new Child();
boolean result = parent instanceof Child; // Child의 객체가 Parent의 자료형이어도, Child의 인스턴스이다.
Child child = (Child)parent;
public abstract class ClassName {
// Field
// Constructor
// Method
}
public abstract void methodName(){};
private abstract void methodName(){};
Inspired by https://github.com/woowacourse/back-end-roadmap