자바 기본 지식 (1)

리진아·2023년 1월 11일
0
post-thumbnail

스프링 입문을 위한 자바 교재를 보고 요약한 글이다.

즐감하세요.


✔︎ 자바 : 객체 지향 프로그래밍 언어

JVM : 자바 가상 기계 (가상의 컴퓨터)
JDK : 자바 개발 도구, JVM용 소프트웨어 개발 도구
JRE : 자바 실행 환경, JVM용 OS

이진아(object), 먹다(method), 나이 또는 키(property) 라고 비유할 수 있음.


✔︎ 객체 지향의 특성

  1. 추상화 : 모델링
  2. 상속 : 재사용
  3. 다형성 : 사용 편의
  4. 캡슐화 : 정보 은닉

클래스와 객체

✔︎ 객체지향은 특성은 클래스 또는 객체로 구현 됨.

객체 : 세상에 존재하는 유일무일한 사물. 속성+기능을 갖고 있는,
클래스 : 분류, 집합. 객체를 묶은..

스태틱 : 클래스의 놀이터
스택 : 메서드의 놀이터
힙 : 객체의 놀이터

사람은 클래스인가? 객체인가?
이진아는 클래스인가? 객체인가?
디지몬은 클래스인가? 객체인가?
아구몬은 클래스인가? 객체인가?

-> 이진아, 아구몬은 객체 사람과 디지몬은 클래스

1️⃣ 추상화:모델링

✔︎ 추상화 : 구체적인 것을 분해하여 관찰자가 관심 있는 특성만 가지고 재조합하는 것. 즉,
구체적인 것을 분해해서 관심 영역(애플리케이션 경계)에 있는 특성만 가지고 재조합 하는 것 = 모델링

  • OOP의 추상화는 모델링
  • 클래스 설계에서 추상화가 사용
  • 클래스 설계를 위해서는 애플리케이션 경계부터 정해야 됨
  • 객체 지향에서 추상화의 결과는 클래스

추상화 = 모델링 = 자바의 class 키워드

✔︎ T메모리
이진아의 눈은 2개
아이유의 눈은 2개
이용진의 눈은 2개
-> 모두 눈의 개수는 2개이기 때문에 낭비되는 메모리를 위해 멤버 속성 (static키워드가 붙은)으로 절약

ex)

public static int eyes = 2;

✔︎ 클래스 멤버 = static 멤버 = 정적 멤버
✔︎ 객체(오브젝트) 멤버 = 인스턴스 멤버

클래스는 JVM구동 시 T 메모리의 스태틱 영역에 배치됨. 그러나
정적 속성인 경우 T 메모리의 배치될 때 클래스 내부에 메모리 공간이 확보 됨.

2️⃣ 상속: 재사용 + 확장

public class 아구몬 extends 디지몬{
	아구몬(){
    	myClass = "아구몬";
    }
}

하위 클래스 is a kind of 상위 클래스
아구몬 is a kind of 디지몬 -> 아구몬은 디지몬의 한 분류임

하위 클래스는 상위 클래스의 한 분류임

  1. 객체 지향의 상속은 상위 클래스의 특성을 재사용 함
  2. 객체 지향의 상속은 상위 클래스의 특성을 확장하는 것
  3. 객체 지향의 상속은 is a kind of 관계를 만족

인터페이스는 클래스가 "무엇을 할 수 있다" 라고 하는 기능을 강제로 구현하게 함

public class 포켓몬
	String myClass;
    
    포켓몬(){
    	myClass = "포켓몬";
    }
    void showMe(){
     sout(myClass);
     }
}
public interface 물대포를 쏘는 {
	void water();
}
public class 펭도리 extends 포켓몬 implements 물대포를 쏘는{
	펭도리(){
        myClass = "펭도리";
	}
}

3️⃣ 다형성: 사용편의성

다형성 : 하나의 객체, 메서드가 여러가지 다른 형태를 가질 수 있는 것

✔︎ 오버라이딩(올라타기) -> 오토바이에 올라탄 고양이, 위에서 바라볼 때 어떻게 보일까
재정의 : 상위 클래스의 메서드와 같은 매서드 이름, 같은 인자 리스트

✔︎ 오버로딩(적재하기) -> 트럭에 짐을 적재할 때, 가로로 쌓을까 세로로 쌓을까
중복 정의 : 같은 메서드의 이름, 다른 인자 리스트

4️⃣ 캡슐화: 정보 은닉

캡슐화 : 관련이 있는 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하도록 은닉하는 것

캡슐화의 가장 큰 장점은 정보은닉

✔︎ 접근제어자

캡슐화를 하기 위해서는 접근제어자를 통해 설계가 잘 이루어져야 함.

✔︎ 클래스 접근 제어자
default : 동일 패키지의 클래스에만 객체를 생성 가능
public : 다른 패키지에서 객체를 생성 가능

✔︎ 메소드 접근 제어자
private : 동일한 클래스 안에서만 접근이 가능하고, this를 사용하는 것들은 외부에서 접근 불가능하고, 상속도 안 됨.
default : 접근 제어자가 없는 형태로 동일한 패키지 안에서만 접근이 가능
protected : 동일한 패키지 안에서 사용가능하고, 다른 패키지라도 상속받은 클래스에는 접근이 가능
public : 모든 객체에서 접근 가능

public class member {

	private String id;
	private String pw;
	private int age;

	//getter
	public String getId() {
		return id;
	}
	public String getPw() {
		return pw;
	}
	public int getAge() {
		return age;
	}

	//setter
	public void setId(String id) {
		this.id = id;
	}
	public void setPw(String pw) {
		this.pw = pw;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

member 클래스 내부에 있는 변수들은 접근 제어자가 private으로 선언이 되어있기 때문에 member 클래스 내부에서만 접근이 가능

profile
알맹이가 가득 찬 개발자가 되기 위해 한 걸음 더 다가가는,

0개의 댓글