[Java] 객체 지향 프로그래밍, 접근 제어자, getter & setter, static 멤버

sm·2023년 3월 14일
0

Web

목록 보기
21/24

객체 지향 프로그래밍

  • 필요한 데이터와 코드를 묶어 하나의 객체로 만들고 이 객체들 간에 상호작용을 하도록 프로그램을 만드는 방식
  • 장점: 코드 재사용에 용이, 유지 보수에 용이 → 문제가 생긴 부분만 보수하면 된다.
  • 단점: 처리 속도가 느림, 설계가 복잡함

클래스의 구조 : 필드, 생성자 ,메소드

  • 필드(변수): 클래스 내에서 값을 저장하는 변수
  • 메소드: 클래스 내에 선언된 함수
  • 생성자: 객체가 생성될 때 자동으로 호출되는 메소드
  • 생성자: 객체가 생성될 때 자동으로 호출되는 메소드 : 생성자의 이름은 클래스 이름과 같아야 함. : 생성자는 리턴 타입을 적지 않음.
public class ClassName {
	public ClassName() {} // 생성자
}

클래스의 사용 (객체 만들기)

  • new 키워드 이용
public class Main {

	public static void main(String[] args) {
		ClassName test = new ClassName(); 
		//test는 객체, 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 키워드 사용 불가
profile
📝 It's been waiting for you

0개의 댓글