[포스코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
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