객체 지향 프로그래밍
- 필요한 데이터와 코드를 묶어 하나의 객체로 만들고 이 객체들 간에 상호작용을 하도록 프로그램을 만드는 방식
- 장점: 코드 재사용에 용이, 유지 보수에 용이 → 문제가 생긴 부분만 보수하면 된다.
- 단점: 처리 속도가 느림, 설계가 복잡함
클래스의 구조 : 필드, 생성자 ,메소드
- 필드(변수): 클래스 내에서 값을 저장하는 변수
- 메소드: 클래스 내에 선언된 함수
- 생성자: 객체가 생성될 때 자동으로 호출되는 메소드
- 생성자: 객체가 생성될 때 자동으로 호출되는 메소드 : 생성자의 이름은 클래스 이름과 같아야 함. : 생성자는 리턴 타입을 적지 않음.
public class ClassName {
public ClassName() {}
}
클래스의 사용 (객체 만들기)
public class Main {
public static void main(String[] args) {
ClassName test = new ClassName();
}
}
자바의 패키지
: 관련 있는 클래스 파일을 저장하는 공간
접근 제어자
- 접근 제어자의 목적: 클래스나 필드, 메소드를 외부에서 접근 제한을 걸어두는 것
- 종류:
- public: 패키지에 관계 없이 모든 클래스에서 접근 가능
- protected: 같은 패키지 내의 모든 클래스에서 접근 가능(다른 패키지에서 접근 불가)
- 단, 다른 패키지에 있더라도, 자식 클래스한테 접근 허용
- default: 같은 패키지내의 모든 클래스에서 접근 허용(아무것도 적지 않으면 default)
- private: 무조건 같은 클래스내에 있어야 접근 가능
getter와 setter (source 탭 - 쉽게 생성 가능)
- 보통 클래스에서 필드는 private로 설정하는 것이 일반적이다.
- 간접적으로 필드에 접근할 수 있도록 public메소드를 제공한다. ⇒ getter, setter 메소드를 통해 필드 값 변경
- getter: 필드 값을 가져올 때
- setter: 필드 값을 설정할 때
Static 멤버(변수, 메소드)
- 객체 마다 생성되는 것이 아니고 클래스 하나만 생성됨
- 클래스가 생성되는 순간에 메모리를 할당 받음.
- 즉, 객체를 생성하지 않아도 static 멤버에 접근가능
- 동일한 클래스의 모든 인스턴스에 공유됨. (같은 메모리 공간 공유)
- non-static의 경우 객체가 생성될 때 마다 멤버 공간을 새로만듦. → 메모리공간이 공유되지 않음.
Static의 활용
- 보통 static 변수는 공유의 목적으로 많이 사용됨
public static int COUNT = 0;
- static 메소드는 유틸리티성 메소드를 작성할 때 많이 사용됨
-
예: 오늘의 날짜 구하기, 숫자에 콤마 추가하기 등등
-
예: java.lang 패키지의 Math클래스
public final class Math {
public static int abs(int a);
public static double cos(double a);
public static int max(int a, int b);
public static double random();
...
}
int n = Math.abs(-3);
static의 제약
- static 메소드에서 non-static 멤버에 접근할 수 없음
- 객체가 생성되지 않은 상태에서 non-static멤버는 만들어져 있지 않기 때문에
- 반대로 non-static 메소드에서는 static에서 멤버에 접근할 수 있음
- static 메소드에서는 this 키워드 사용 불가