PLOD

[Java] 객체지향프로그래밍(Object-Oriented Programming, OOP) 본문

개발 공부/Java

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

훌룽이 2023. 6. 21. 10:35

 

자바 언어의 특징

1. 운영체제에 독립적이다.
JVM(java virtual machine)이 있기 때문에 JVM 이 자바 응용프로그램으로부터 전달받은 명령을 해당 운영체제가 이해할 수 있도록 변환하여 전달
2. 객체지향언어이다.
Ⅰ.코드의 재사용성이 높다
Ⅱ. 코드의 관리가 용이하다
Ⅲ. 신뢰성 높은 프로그래임을 가능하게 한다)

Java는 캡슐화, 상속, 추상화, 다형성이 잘 적용되어 있다.
3. 비교적 배우기 쉽다
4. 자동 메모리 관리
garbage collector가 자동적으로 메모리를 관리해주기 때문에 프로그래머가 따로 메모리를 관리해줄 필요가 없다
5. 네트워크 분산처리를 지원한다.
6. multi-thread를 지원한다.
7. dynamic loading을 지원한다.

 

자바 언어의 특징

변수(variable)  : 단 하나의 값을 저장할 수 있는 메모리 공간

* 두 변수의 값 교환하기

int x = 10;
int y = 20;

다음 두 변수 x,y가 있을 때, 두 변수에 담긴 값을 서로 바꾸려면 , 임시 저장소 tmp 변수가 따로 또 필요하다.

public class VarEx01 {

	public static void main(String[] args) {
		int year = 0;
		int age = 20;
		int tmp = 0;
		
		System.out.println(year);
		System.out.println(age);
		
		tmp = age;
		age = year;
		year = tmp;
		
		System.out.println(year);
		System.out.println(age);
	}

}

* 변수의 명명 규칙

1. 대소문자가 구분되며 길이에 제한이 없다
2. 예약어를 사용해서는 안된다
ex) 예약어
abstract, assert, boolean , default,goto,package....
3. 숫자로 시작해서는 안된다
4. 특수문자는 '_', '$' 만 허용된다
5. (권유) 클래스의 이름의 첫 글자는 항상 대문자로 한다.
6. 여러 단어로 이루어진 이름은 단어의 첫 글자를 대문자로 한다.
7. 상수(final)의 이름은 모두 대문자로 한다. 여러단어로 이루어진 경우 '_'로 구분한다.

 

* 변수의 종류

기본형(primitive type) - > 8개
논리형(boolean) , 문자형(char) , 정수형(byte,short,int,long) , 실수형(float,double)
- > 계산을 위해 실제값을 저장한다.

참조형(reference type) - > 4개
배열(array),열거(enum),클래스(class),인터페이스(interface) - > 객체의 주소를 저장한다.

객체지향프로그래밍

1. 클래스 

클래스란 객체를 정의해놓은 것이다. 객체란 실제로 존재하는것 사물 또는 개념을 의미한다. 클래스와 객체의 관계를 우리가 살고 있는 실생활에서 예를 들면, 제품 설계도와 제품과의 관계라고 할 수 있다. 예를 들면 TV 설계도는 TV라는 제품을 정의한 것이며 TV를 만드는데 사용된다. 

클래스로부터 객체를 만드는 고정을 클래스의 인스턴스화라고 하며, 클래스로부터 만들어진 격체를 그 클래스의 인스턴스(instance)라고 한다. 

객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다. 즉, 객체는 속성과 기능의 집합이라고 할 수 있다. 속성은 멤버변수, 특성 ,필드, 상태로 이루어져 있고 기능은 메서드, 함수, 행위로 이루어져 있다. 

- 변수 : 하나의 데이터를 저장할 수 있는 공간
- 배열 : 같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간
- 구조체 : 서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간
- 클래스 : 데이터와 함수의 결합(구조체 + 함수)

객체는 속성과 기능 , 두 종류의 구성요소로 이루아져 있으며, 일반적으로 객체는 다수의 속성과 다수의 기능을 갖는다. 즉, 객체는 속성과 기능의 집합이라고 할 수 있다. 

속성(property) : 멤버변수,특성, 필드,상태
기능(function) : 메서드, 함수, 행위

 

*JVM 메모리구조

 

1) 메서드 영역

프로그램 실행 중  어떤 클래스가 사용되면 JVM은 해당 클래스의 클래스 파일을 읽어서 분석하여 클래스에 대한 정보를 이곳에 젖아한다. 이때 그 클래스의 클래스 변수도 이 영역에 함께 생성된다

2) 힙 영역

인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉, 인스턴스 변수들이 생성되는 공간이다.

3)스택 영역

메서드 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면 호출된 메서드를 위한 메모리가 할당되며 메서드가 작업을 마치면 할당되었던 메모리공간은 반환되어 비워진다.

 

각 메서드를 위한 메모리 상의 작업공간은 서로 구별되며, 첫 번째로 호출된 메서드를 위한 작업 공간이 호출 스택의 맨 밑에 마련되고, 첫 번째 메서드 수행 중에 다른 메서드를 호출하면 첫번째 메서드 바로 위에 두번째로 호출된 메서드를 위한 공간이 생성된다. 다음 그림을 보면 one 메소드가 two 메소드를 호출하고 two 메소드는 three 메소드를 호출한다. 객체를 생성하지 않고도 메서드를 호출하려면 메서드 앞에 static을 붙여야 한다. 

*JVM 메모리구조

기본형 매개변수 : 변수의 값을 읽기만 할 수 있다.
참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다.
package Java_ex;

public class ReferenceParamTest {
	
	public static void main(String[] args) {
		Data d = new Data();
		d.x = 10;
		System.out.println("x = " + d.x);
		
		change(d);
		System.out.println("x = " + d.x);
	}
	
	static void change(Data d) {
		d.x = 1000;
		System.out.println("x = " + d.x);
	}
	

}


class Data{int x;}

 

'개발 공부 > Java' 카테고리의 다른 글

[Java] 연산자(Operator)  (0) 2023.09.12
[Java] 배열(array)  (0) 2023.09.04
[Java] sort(정렬)  (0) 2023.05.31
[Java] 제네릭 클래스 (Generic Class)  (0) 2023.01.24
[Java] Exception(예외 처리)  (0) 2023.01.23
Comments