Back-End/Java 기초정리

Java ■ 객체

SIKIDA 2024. 4. 17. 10:20
728x90

◈ 객체 지향 프로그래밍 (Object-Oriented Programming, OOP)

프로그래밍에서 필요한 데이터들을 추상화 시켜 객체를 만들고, 객체들간의 상호작용을

통해 프로그램을 개발하는 프로그래밍 패러다임 중의 하나

 

• 자바 객체 지향 개념에서의 핵심 4가지

캡슐화, 상속, 추상화, 다형성

 

 

• 캡슐화(Encapsulation)

변수와 메서드를 클래스로 묶어 독립적으로 동작하지 않도록 하거나 불필요한 정보를 노출시키지 않는 개념

1. 코드의 유지보수성을 향상

2. 객체의 내부 구현을 외부로부터 숨김 (정보 은닉)

3. 객체의 내부 상태를 제어하고, 잘못된 접근으로부터 보호함

 

• 상속(Inheritance)

부모 클래스가 가지고 있는 것을 자식 클래스가 물려받아 확장(extends)하는 개념

1. 코드의 재사용성을 높이고, 중복을 최소화

2. 계층적인 구조를 통해 객체 간의 관계를 나타낼 수 있음

 

• 추상화(Abstraction)

구체적인 사실들을 일반화시켜 기술하는 개념으로써 필요한 공통점을 추출하고 불필요한 공통점을 제거하는 과정

1. 복잡한 시스템을 단순화하고 모델링이 가능

 

• 다형성(Polymorphism)

여러가지의 형태를 가질 수 있는 개념 (오버로딩, 오버라이딩, …)

1. 코드의 재사용성을 높이고, 중복을 최소화

2. 계층적인 구조를 통해 객체 간의 관계를 나타낼 수 있음

 

 

클래스(Class)

개발자가 어떠한 프로그램을 제작하기 위한 설계도(틀)

ex) 자동차 설계도, TV 설계도, 마이크 설계도...

 

• 클래스의 유래

1. 변수 : 한가지의 데이터를 저장하는 공간

2. 배열 : 같은 타입을 가진 데이터를 저장하는 공간

3. 구조체 : 서로 다른 타입을 가진 데이터를 저장하는 공간

4. 클래스 : 서로 다른 타입을 가진 데이터와 특정 기능을 실행하는 함수의 결합

◈ 클래스 선언 방식

 

◈클래스 접근제한자

• 참고

자바에서 public 클래스는 소스파일에서 하나만 가질 수 있음

* 접근 제한자는 캡슐화 개념중의 하나이다.

 

• 클래스 접근제한자 사용 예시

 

 

• 하나의 소스파일에서 여러 개의 클래스를 작성할 때 주의점

1. public class가 있는 경우에는 반드시 소스파일과 클래스의 이름이 일치해야 함 * 대소문자 구별

2. public class가 없는 경우에는 소스파일의 이름을 클래스 이름 중 하나로 가능

3. 하나의 소스파일에 2개의 public class를 가질 수 없음

 

◈ 메소드

클래스 내부에서 정의된 동작이나 기능을 수행하는 역할로써 어떠한 값을 전달하여

특정 작업을 수행하고 값을 반환할 수 있음

* 값의 반환은 필수가 아님

 

 

◈ 메소드 접근제한자

* 접근 제한자는 캡슐화 개념중의 하나이다

 

 

◈ 메소드 예약어

메소드 예약어는 개발자가 사용하려는 용도에 따라 선택이 가능

 

 

◈ 메소드 반환형

메소드에서 코드가 실행되고 어떠한 값을 반환하고 싶을 때 사용되며, 반환은 필수가 아님

 

 

메소드 매개변수  

메소드에 전달되는 값의 정보를 담는 변수

 

 

• 주의 사항

1. 기본 자료형의 경우 메소드 안에서 값을 변경해도 원본 변수는 변경되지 않음

2. 배열과 클래스는 주소 값을 전달하므로 메소드 안에서 수정할 경우 원본 데이터가 수정됨

* 스택 영역 메모리에 어떠한 값이 들어 있느냐의 차이

 

• 참고

기본형 매개변수와 참조형 매개변수의 자세한 예시는 호출 스택을 배운 후 다시 언급

 

• 주의 사항 예시

• 참고

String 타입은 참조형(주소 값을 가지고 있음) 변수이기 때문에 데이터가 수정될 것 같지만,

불변 타입이기 때문에 원본 데이터가 수정되지 않음.

* 객체를 수정하는 연산을 수행하면 새로운 String 객체가 생성됨(변경이 아님)

 

• 가변인자

매개변수의 개수를 유동적으로 설정하는 방법 가변인자는 배열로 취급되며, 매개변수 가장 마지막에 설정해야함

ex)

 

◈ 오버로딩(Overloading)

같은 메소드 이름을 사용하지만 매개 변수의 타입과 위치가 다른 방식

* 다형성의 개념중 하나

 

ex)

 

 

◈ 객체의 생성과 사용 방법

 

• 객체 생성

 

 

 

• 참고

참조형의 경우 메모리 주소 저장을 위해 4byte 또는 8byte의 크기를 갖는다. * 32bit JVM : 4byte / 64bit JBM : 8byte

 

->

->

• 참고

new 연산자에 의해 객체가 생성된 후 객체의 메모리 주소를 반환

 

 

◈ 필드(Field)

클래스 또는 메소드의 속성

 

• 멤버 변수(Member Variable)

클래스 영역에 있는 변수로써 크게 두가지로 나눠짐

1. 인스턴스 변수

2. 클래스 변수

 

• 지역 변수(Local Variable)

메소드 또는 생성자 내부에 위치한 변수

또는 if, for과 같이 블록 {} 안에 있는 변수

 

 

◈변수의 생명 주기

1. 클래스 변수

- 생성 : 클래스가 메모리에 올라갈 때

- 해제 : 자바 프로그램이 종료될 때

2. 인스턴스 변수

- 생성 : 객체가 생성되었을 때

- 해제 : 객체가 GC에 의해 메모리에서 해제 되었을 때

3. 지역 변수

- 생성 : 변수 선언문이 수행 되었을 때

- 해제 : 변수 선언한 블록 {} 이 종료 되었을 때

 

◈ 변수 종류별 메모리 위치

 

• 변수 종류별 메모리 위치(기본형 기준)

1. 클래스 변수 : 정적 영역(Static or Method)

2. 인스턴스 변수(Heap)

3. 지역 변수(Stack)

 

◈필드 선언 방식

 

 

◈ 필드 접근제한자

 

• 필드 접근제한자 사용 예시(1)

 

• 필드 접근제한자 사용 예시(2)

 

◈ 필드 활용

 

 

• 참고

클래스 변수는 정적 영역(static)에 머물러 있기 때문에, 따로 객체화 하지 않아도 사용이 가능함

 

클래스 변수 참고 사항  

• 참고

 

 


정 리

◈ 객체 (필드 + 메소드)  

 

클래스 : 설계도 (틀)

필드 : 클래스 또는 메소드의 속성 (변수, 속성)

메소드 : 정해진 동작이나 기능을 수행 (행위)

 

• 추가 설명

만약, 게임 케릭터를 예시로 들면 아래와 같이도 생각해볼 수 있음

1. 클래스 : 직업 (게임 케릭터의 틀)

2. 필드 : 힘, 민첩, 지력 등등 (속성, 변수)

3. 행위 : 공격하다, 스킬1을 사용하다, 막다 등등 (행위)

 

 

◈접근제한자

이름 그대로 접근을 제한하며, 캡슐화(정보은닉)의 개념 중 하나 아래 표에서

클래스를 제외한 필드와 메소드의 제어자는 같다

 

 

◈ 오버로딩

• 오버로딩의 조건

1. 같은 이름의 메소드를 여러 개 가짐

2. 매개변수의 타입 또는 위치가 다름

이는 다형성(여러가지의 형태를 가질 수 있는 개념) 개념중의 하나

 


 

 

오늘은 객체 지향 프로그래밍에 대해 공부했다

또 복습해야할거같당 그럼 20000!

'Back-End > Java 기초정리' 카테고리의 다른 글

Java ■ 객체 배열  (0) 2024.04.19
Java ■ 객체 문제풀이  (0) 2024.04.18
Java ■ 배열(Array)  (0) 2024.04.16
Java ■ 제어문(반복문)  (0) 2024.04.11
Java ■ 제어문(조건문)  (0) 2024.04.04