목차
0. 객체지향언어
1. 클래스, 객체 Class, Object
2. 인스턴스 Instance
3. 메서드 Method + (클래스 메서드, 인스턴스 메서드)
4. 변수 Variable
0. 객체지향언어
객체지향언어는 코드 간에 서로 관계를 맺어 줌으로써 유기적으로 프로그램을 구성하는 것이다.
[특징]
1. 코드의 재사용성이 높다.
2. 코드의 관리(유지보수)가 용이하다.
3. 신뢰성이 높은 프로그래밍을 가능하게 한다.
가장 큰 장점 : 코드의 재사용성이 높고 유지보수가 용이하다.
[재사용성, 유지보수, 중복된 코드의 제거 관점을 항상 명심하기.]
1. 클래스 Class, 객체 Object
클래스 Class
[정의] 객체를 정의해 놓은 것이다. , 객체의 설계도 또는 틀이다.
[용도] 객체를 생성하는 데 사용한다.
객체 Object
[정의] 실제로 존재하는 것. 사물 또는 개념 / 속성과 기능의 집합.
[용도] 객체가 가지고 있는 기능과 속성에 따라 다르다.
(자바의 정석)
클래스와 객체의 관계
= 제품 설계도 – 제품의 관계
프로그래밍에서는 먼저 클래스를 작성한 다음, 클래스로부터 객체를 생성하여 사용한다.
프로그래밍에서 객체 = 클래스에 정의된 내용대로 메모리에 생성된 것.
클래스를 정의하고 객체를 생성하는 이유
--> 하나의 설계도(클래스)를 잘 만들어 놓으면 제품을 만들 때마다 고민할 필요 없이 설계도대로만 만들면 되기 때문이다. (재사용성)
--> 잘 만들어 놓은 클래스로부터 객체를 생성(수십, 수백 번 반복)해서 사용하기만 하면 되기 때문이다.
객체는 속성과 기능의 집합. (다수의 속성, 다수의 기능)
객체가 가지고 있는 속성과 기능을 멤버라한다.
- 속성 : 멤버변수(member variance), 특성(attribute), 필드(field), 상태(state)
- 기능 : 메서드(method), 함수(function)
클래스는 서로 연관된 변수와 메서드를 그룹핑하여 이름을 붙인 것이며 정리정돈의 상자이다.
(생활코딩 - 쉽게 배우는 자바 1)
2. Instance
인스턴스는 오직 참조변수를 통해서만 다룰 수 있다.
Person 인스턴스를 사용하려면,
person클래스 타입의 참조변수(p1)이 필요하다.
참조변수를 선언하면 참조변수 메모리가 생성된다.
이후 new 연산자를 통해 person인스턴스가 메모리에 생성된다.
이러한 참조변수, 인스턴스의 메모리를 대입연산자(=)을 사용해 인스턴스 메모리의 주소를 참조변수에 저장한다.
이를 통해 참조변수를 사용하여
Person 클래스 내의
사람 객체의 속성(키,몸무게, 나이)과
기능(공부, 운동)을 저장 및 호출을 통해 인스턴스를 수정할 수 있다.
[정리]
참조 변수에는 인스턴스의 메모리 주소가 저장된다.
인스턴스의 메모리에는 각 속성, 기능 값이 저장되어 있다.
참조변수를 통해 인스턴스의 속성, 기능을 수정, 실행할 수 있다. - (자바의 정석)
( + )
자바에서 메서드로 구조를 잡고
메서드와 변수를 그룹핑해서 클래스로 구조를 잡고
클래스를 복제한 인스턴스로 또다른 구조를 만든다.
코드의 성을 쌓아가는 것이 자바의 독특한 특징이다.
(생활 코딩 - 쉽게 배우는 자바 1)
어떤 클래스를 사용할 때 해당 클래스를 인스턴스로 사용하길 원한다면 Constructor 생성해놓았다.
( 클래스이름 변수 = new 클래스() ; )
인스턴스 생성 및 할당은 클래스를 여러 번 사용하지 않기 위해 선언
(docs에 Constructor Summary 유무로 구분할 수 있다. )
(같은 작업을 반복하는 것은 비효율 적이기 때문에 인스턴스를 생성하여 해당 인스턴스를 통해 작업 처리)
3. Method
메서드는 서로 연관된 코드를 그룹핑해서 이름을 붙인 정리정돈의 상자다 ( 생활코딩 - 쉽게 배우는 자바)
Refactor --> Extranc Method를 통해 메서드 생성 (단축키 : Alt + Shift + M )
메서드 생성!
getVAT( valueOfSupply, VatRate ) 메서드 안의 valueOfSupply, VatRate는 입력 변수이다.
해당 입력 변수를 메서드에서 결정한 로직에 따라 결과 값을 return 한다. (파이썬에서 함수와 같은 기능)
메서드를 사용해서 main 메서드의 코드를 짧게 줄일 수 있다.
해당 main 메서드에 사용하는 다른 메서드는 오른쪽과 같이 생성했다.
3-1 클래스 메서드
클래스 = 데이터(변수)와 메서드의 집합
클래스 메서드
인스턴스 변수, 인스턴스 메서드를 사용하지 않는 메서드.
[특징]
● 인스턴수 변수와 관계없이 매개변수 만으로 작업이 가능하다. (매개변수가 필요하다.)
● 인스턴수 메서드를 사용하기 위해서는 객체 생성 후 인스턴스 변수 사용 가능
위와같이 클래스 메서드를 생성하면 변수를 따로 생성하지 않고
메서드의 매개변수만을 선언해준다.
아래에서 해당 메서드를 호출하여 매개변수를 통해 값을 계산하는 메서드를 사용할 수 있다.
이를 통해 클래스 메서드 (static을 붙인 메서드)는
변수(인스턴스 변수)를 따로 생성하지 않고
호출 시 매개변수만을 잘 넣어 준다면 위와같이 사용이 가능하다.
위와같이 특정 클래스 메서드(staticMethod2)에서 다른 클래스 메서드(staticMethod1)을 호출 시
다른 조건 없이 사용할 수 있다.
반대로 인스턴스 메서드는 사용할 수 없다.
하지만, 해당 클래스의 객체(mc)를 생성 후
해당 객체의 메서드(인스턴스 메서드 : instanceMethod1)를 호출하는 방식을 사용하면
인스턴스 메서드를 사용할 수 있게 된다.
(띠로리..)
3-2 인스턴스 메서드
인스턴스 변수와 관련된 작업을, 인스턴스 변수를 필요로 하는 메서드
인스턴스 매서드는 인스턴스를 생성해야만 호출할 수 있다.
왜냐하면, 인스턴스 변수는 인스턴스를 생성해야만 만들어 지기 때문이다.
[순서]
인스턴스 생성 --> 인스턴수 변수 생성 --> 인스턴스 메서드
[특징]
● 매개변수가 필요 없다. (인스턴스 변수 사용)
● 클래스변수를 사용할 수 있다.
인스턴스 메서드는 해당 클래스의 변수를 생성한 후 이를 이용한다.
클래스 메서드와 달리 매개변수(parameter)들을 받지 않고도
위와 같이 인스턴스 변수(c, d)를 사용하여 메서드 로직을 실행한다.
인스턴스 메서드는
인스턴스 변수 및 클래스 변수가 사용이 가능하다.
또한 인스턴스 메서드에서는 다른 인스턴스 메서드는 물론
클래스 메서드도 특별한 과정(인스턴스 생성 등)없이 바로 호출 할 수 있다.
--> (클래스 메서드에서는 인스턴스 메서드 바로 호출 불가)
+ 메서드 중에서 인스턴스 변수를 사용하지 않는 메서드는 static을 붙이는 것을 고려한다.
--> 필수적이지는 않지만 규범(약속)이다.
4. 변수 variable
변수는 [멤버변수, 지역변수] 2가지 종류로 나눌 수 있다.
멤버변수에는 클래스변수, 인스턴스변수가 있으며 지역변수까지 세 가지이다.
클래스변수, 인스턴스변수는 멤버변수이며 이 외의 변수는 모두 지역변수이다.
멤버 변수 중 static이 붙은 변수는 클래스변수, 붙지 않은 변수는 인스턴스변수이다.
멤버변수는 클래스 영역내에 위치하며 , 지역변수는 메서드 영역에 위치한다.
1. 클래스변수 (static + 인스턴스 변수)
클래스 영역에 선언되며, 인스턴스변수 앞에 static을 붙인다.
하나의 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성을 클래스 변수로 선언한다.
(TV로 예를 들면, 화면 Boolean의 true값)
클래스 변수는 해당 클래스가 종료될 때 까지 유지되며 전역변수의 성격을 갖는다.
2. 인스턴스변수
클래스 영역에 선언되며 클래스의 인스턴스를 생성할 때 만들어진다.
인스턴스마다 고유한 상태를 유지해야하는 속성의 경우 인스턴스변수로 선언한다.
(TV로 예를 들면, 화면의 크기)
3. 지역변수
메서드 내에 선언되며 메서드 내에서만 사용 가능하다.
자바의 공식 사용 설명서
https://docs.oracle.com/javase/7/docs/api/
자바가 기본적으로 제공하는 라이브러리.
왼쪽 위에는 패키지들이
왼쪽 아래에는 클래스 설명이 있다.
패키지(Package)는 클래스(Class)들의 집합(묶음)으로 정리한 것이다.
클래스라는 것은 하나의 프로그램이다.
클래스는 서로 연관된 변수, 메서드를 모아서 이름을 붙인 것이다.
변수와 메서드는 실제 기능을 하는 변수 및 함수이다.
패키지 ⊃ 클래스(여러개) ⊃ 변수, 메서드
Math(클래스) ⊃ floor , ceil , round(메서드), PI(변수) 등
'Dev > ☕ Java' 카테고리의 다른 글
[Java] 자바 개발환경과 실행 과정 (feat. JDK, JRE, JVM) (0) | 2023.05.28 |
---|---|
[자바의정석 정리-3] 다형성 (0) | 2022.08.03 |
[자바의정석 정리-2] 상속 inheritance, 오버라이딩, Super, Super() (0) | 2022.05.26 |
[Java] 동등 비교 연산자 vs equals() 메서드 (feat. 데이터 타입) (0) | 2022.05.02 |
댓글