[포스코x코딩온] 웹개발자 풀스택 부트캠프8기

[포스코x코딩온] Java(객체지향, 클래스, 메소드, 접근 제어자,static, getter & setter)

항상 발전하는 개발자 2023. 10. 23. 13:53
728x90

객체지향 프로그래밍

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

클래스

  • 필드(변수) : 클래스 내에서 값을 저장하는 변수
  • 메소드 : 클래스 내에 선언된 함수
  • 생성자 : 객체가 생성될 때 자동으로 호출되는 메소드

 

메소드 기본 구조

  • 메소드 형태

  • 생성자
    • 생성자의 이름은 클래스 이름과 같아야 한다.
    • 생성자는 리턴 타입을 적지 않는다.
public class ClassName{
	public ClassName(){} //생성자
}

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

  • new 키워드 이용
    • test는 객체
    • test는 ClassName 클래스의 인스턴스
public class Main {
	
	public static void main(Stringp[] args){
		ClassName test = new ClassName();
	}
}

접근 제어자

자바의 패키지

  • 관련 있는 클래스 파일을 저장하는 공간
  • 접근 제어자의 목적
    • 클래스나 일부 멤버(필드, 메소드)를 외부에서의 접근 제한을 걸어두는 것
  • 접근 제어자의 종류
    • public
      • 패키지에 관계 없이 모든 클래스에서 접근 가능
    • protected 
      • 같은 패키지 내의 모든 클래스에서 접근 가능(다른 패키지에서 접근 불가)
      • 단, 다른 패키지에 있더라도 상속 받은 서브 클래스에서는 접근 가능
    • default
      • 같은 패키지 내의 모든 클래스에서 접근 가능(다른 패키지에서 접근 불가)
    • private
      • 같은 클래스에서만 사용 가능
public 같은 클래스, 같은 패키지, 자식 클래스, 전체
protected 같은 클래스, 같은 패키지, 자식 클래스
defaule 같은 클래스, 같은 패키지
private 같은 클래스


Getter 와 Setter

  • 클래스에서 필드(변수)는 private로 지정하는 것이 일반적이다.
  • 따라서 간접적으로 필드에 접근할 수 있도록 public 메소드를 제공
  • 이것을 getter와 setter라고 한다.
  • getter: 필드 값을 가져올 때
  • setter: 필드 값을 설정할 때

    ※코드를 하나씩 적어도 되지만, 마우스 우클릭=>source=>Gernerate Getters and Setters를 이용하여 편하게 만들 수 있다.

Static

static 멤버(변수, 메소드)

  • 객체마다 생성되는 것이 아니고, 클래스당 하나만 생성됨
  • 클래스가 생성되는 순간에 메모리를 할당 받음
  • 즉, 객체를 생성하지 않아도 static 멤버에 접근 가능
  • 동일한 클래스의 모든 인스턴스에 공유된다.(같은 메모리 공간 공유)
  • non-static의 경우 객체가 생성될 때마다 멤버 공간을 새로 만든다.
    • 메모리 공간이 공유되지 않는다.

static의 활용

  • 보통 static 변수는 공유의 목적으로 많이 사용된다.
public static int COUNT = 0;
  • static 메소드는 유틸리티성 메소드를 작성할 때 많이 사용된다.

static의 제약

  • static 메소드에서 non-static 멤버에 접근할 수 없다.
    • 객체가 생성되지 않은 상태에서 non-static 멤버는 만들어져 있지 않기 때문이다.
  • 반대로, non-static 메소드에서 static 멤버에 접근할 수 있다.
  • static 메소드에서는 this 키워드 사용이 불가능하다.

위의 내용을 활용한 예시 코드

  • Car
package Java_Class;

public class Car {
	
	//접근제어자
	//public: 같은 클래스O, 같은 패키지O, 자식 클래스O, 전체O
	//protected: 같은 클래스O, 같은 패키지O, 자식 클래스O
	//default: 같은 클래스O, 같은 패키지O
	//private: 같은 클래스O
	
	//멤버변수
	private int speed;
	
	//생성자
	//클래스명과 동일해야함.
	public Car(int speed) {
		this.speed = speed;
	}
	
	//메소드
	void start() {
		System.out.println("Car Start");
	}

	//마우스 우클릭 source에서 getter와 setter를 빠르게 만들 수 있다.
	public int getSpeed() {
		return speed;
	}

	public void setSpeed(int speed) {
		//처음 할당되었을 때는 0으로 할당되어 있다.
		System.out.println(this.speed);
		//유효성 검사
		if(speed > 0) {
		this.speed = speed;
		}
		
	}
	
	//중복 방지를 위한 메소드
	public void increaseSpeed(int speed) {
		this.speed = this.speed + 100;
	}
	
//	//setter 메소드
//	void setSpeed(int speed) {
//		this.speed = speed;
//	}
//	
//	//getter 메소드
//	int getSpeed() {
//		return this.speed;
//	}
	
}
  • CarContainer
package Java_Class;

public class CarContainer {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Car bmw = new Car(30);
		Car kia = new Car(20);
		
		bmw.start();
		kia.start();
		
//		//잘못된 접근 방법
//		bmw.speed = 120;
//		kia.speed = 90;
		
		//객체 멤버변수 보호
//		bmw.setSpeed(-120);
		//kia.setSpeed(90);
		
		bmw.setSpeed(120);
		kia.setSpeed(90);
		
		//중복 코드
//		int bmwSpeed = bmw.getSpeed();
//		bmwSpeed = bmwSpeed + 100;
//		bmw.setSpeed(bmwSpeed);
//		
//		int kiaSpeed = kia.getSpeed();
//		kiaSpeed = kiaSpeed + 100;
//		kia.setSpeed(kiaSpeed);
		
		bmw.increaseSpeed(100);
		kia.increaseSpeed(100);
		
		System.out.println("bmw"+ bmw.getSpeed());
		System.out.println("kia"+ kia.getSpeed());
		
	}

}

Java(객체지향, 클래스, 메소드, 접근 제어자,static, getter & setter)

728x90