Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- XLF
- 금리인하
- mco
- 금리인상
- 객체지향
- object
- 접근제어자
- 알고리즘
- S&P500
- 미국주식
- 오버라이딩
- 무디스
- 인플레이션
- 기업분석
- 잉여현금흐름
- StringBuffer
- 그리디 알고리즘
- FCF
- 백준
- 주린이
- 프로그래머스
- 제태크
- etf
- 자바
- 현금흐름표
- 주식
- Java
- javascript
- 다형성
- 배당성장
Archives
- Today
- Total
오늘의하루
[JAVA 공부 3일차] 객체지향 Part 1 본문
객체지향 언어의 특징으로 크게 4가지 있다.
- 기존의 프로그래밍 언어와 크게 다르지 않다.
- 코드의 재사용성이 높다.
- 코드의 관리가 쉬워진다.
- 신뢰성 높은 프로그램의 개발이 가능하다.
1. 객체의 구성요소
객체의 구성요소에는 속성(변수)과 기능(메서드)으로 이뤄져 있습니다.
public class Mainclass{
public static void main(String[] args){
// 클래스명 참조변수명 = new 클래스명();
Tv t = new Tv(); // 인스턴스 생성
t.channel = 7; // 인스턴스 사용
System.out.println(t.channel); // 7;
}
}
class Tv{
// ⭐ 인스턴스 변수
String color;
boolean power;
int channel;
// ⭐ 인스턴스 메소드
void power() {
power = !power;
}
void channelUp() {
channel++;
}
void channelDown() {
channel--;
}
}
2. 참조 변수와 인스턴스의 관계
하나의 참조 변수명은 하나의 인스턴스만을 가질 수 있지만 인스턴스의 경우 여러 개의 참조 변수명이 가리키는 게 가능하다.
public class Mainclass{
public static void main(String[] args){
Tv t1 = new Tv(); // t1에 인스턴스 Tv의 주소를 저장한다.
Tv t2 = new Tv(); // t2에 인스턴스 Tv의 주소를 저장한다.
t2 = t1; // t2에 t1의 주소를 저장한다.
// ⭐ t2와 t1이 같은 인스턴스를 바라보게 된다.
t1.channel = 7;
System.out.println(t1.channel); // 7
System.out.println(t2.channel); // 7
}
}
class Tv{
int channel;
void channelDown() { channel--; }
}
3. 객체의 배열
객체를 배열에 저장하여 사용할 수 있다.
public class Mainclass{
public static void main(String[] args){
Tv[] ArrC = new Tv[3]; // 타입이 Tv인 3칸 짜리 배열을 만든다.
for(int i = 0; i < ArrC.length; i++){
ArrC[i] = new Tv();
}
ArrC[0].channel = 1; // 0번 인덱스의 channel 값은 1
ArrC[1].channel = 2; // 1번 인덱스의 channel 값은 2
ArrC[2].channel = 3; // 2번 인덱스의 channel 값은 3
}
}
class Tv{
int channel;
void channelDown() { channel--; }
}
4. 선언 위치에 따른 변수 종류
변수의 종류 | 선언위치 | 생성시기 | 비고 |
클래스 변수(Static 변수) | 클래스 영역 | 실행 시 | 생성하지 않고 사용 가능 |
인스턴스 변수 | 인스턴스 생성시 | - | |
지역변수 | 메소드 영역 | 변수 선언문 호출 시 | - |
public class Myclass{
public static void main(String[] args){
System.out.println(Card.width); // 100;
// 인스턴스를 생성하지 않았지만 클래스 변수는 사용이 가능하다.
Card a = new Card();
// ⭐ 클래스 변수를 변경하고 싶을때는?
// 클래스명.클래스변수명 = 변경값;
Card.width = 150;
// 이렇게도 클래스 변수를 변경할 수 있지만 인스턴스 변수와
// 구분되지 않기 때문에 💥 사용하지 않는것을 권장한다.
a.height = 300;
}
}
class Card{
// 인스턴스 변수
String kind;
int number;
// 클래스 변수(Static 변수)
static int width = 100;
static int height = 250;
}
클래스 변수 또는 클래스 메서드의 경우 몇 개의 인스턴스를 생성하더라도 하나만 만들어져서 메모리에 올라가 있는다.
5. 클래스 메서드와 인스턴스 메서드
인스턴스 메서드와 클래스 메서드의 특징에 대해 알아보기
- 인스턴스 메서드
- 인스턴스 생성 후 "참조 변수. 메서드 이름()"으로 호출
- 인스턴스 변수를 메서드 내에서 사용 가능
- 클래스 메서드(static 메서드)
- 객체 생성 없이 "클래스 이름. 메서드 이름()"으로 호출
- 인스턴스 변수와 상관없이 작업 가능하다.
- 메서드 내에서 인스턴스 변수는 사용 불가능하다.
- 메서드 내에서 인스턴스 변수를 사용하지 않는다면 static을 붙이는 것을 고려해야 한다.
public class MyClass {
public static void main(String[] args){
System.out.println(Testclass.staticMethod(1,2));
Testclass a = new Testclass();
a.x = 1;
a.y = 1;
System.out.println(a.instanceMethod());
}
}
class Testclass{
// 인스턴스 변수
int x;
int y;
// 클래스 변수(static 변수)
static int a = 10;
static int b = 20;
// 인스턴스 메소드
// ⭐ 인스턴스 메서드에는 클래스 메서드를 사용할 수있다.
int instanceMethod(){
int aa = staticMethod(a, b);
return x + y + aa; // 인스턴스 변수를 사용
}
// 클래스 메소드
// 💥 클래스 메서드에는 인스턴스 메서드를 사용할 수 없다!
static int staticMethod(int i, int j){
// 💥 인스턴스 변수 사용할 수 없다.
return i + j; // i와 j는 지역변수이다.
}
}
6. 메서드 오버 로딩(Method overloading)
하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것을 말한다.
메서드 오버 로딩을 하기 위해서는 3가지 조건을 지켜야 한다.
- 메서드의 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
- 리턴 타입은 오버 로딩을 구현하는데 아무런 영향을 주지 못한다.
public class Myclass{
public static void main(String[] args){
}
}
class Testoverloading{
// 예제1 💥
// 💥 이건 그냥 코드 중복이다.
// 2번 조건이 성립되지 않는다.
int add(int a, int b){
return a + b;
}
int add(int x, int y){
return x + y;
}
// 예제2 💥
// 2번 조건이 성립되지 않는다.
int add(int a, int b){
return a + b;
}
long add(int a, int b){
return (long) a + b;
}
// 예제3 🧡
// 모든 조건에 성립된다.
long add(int a, long b){
return a + b;
}
long add(long a, int b){
return a + b;
}
// 예제4 🧡
// 모든 조건에 성립된다.
int add(int a, int b){
return a + b;
}
long add (long a, long b){
return a + b;
}
int add(int[] a){
int result = 0;
for (int i = 0; i < a.length; i++){
result = result + a[i];
}
return result;
}
}
'JAVA' 카테고리의 다른 글
[JAVA 공부 5일차] 객체지향 Part 3 (0) | 2022.07.27 |
---|---|
[JAVA 복습] 객체지향, 배열, 연산 (0) | 2022.07.26 |
[JAVA 공부 4일차] 객체지향 Part 2 (0) | 2022.07.26 |
[JAVA 공부 2일차] if문, 반복문, 배열 (0) | 2022.07.22 |
[JAVA 공부 1일차] JAVA 실행 순서 및 타입, 연산, 문자열 (0) | 2022.07.21 |
Comments