-
[JAVA 공부 3일차] 객체지향 Part 1JAVA 2022. 7. 25. 15:21728x90반응형
객체지향 언어의 특징으로 크게 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; } }
728x90반응형'JAVA' 카테고리의 다른 글
[JAVA 공부 5일차] 객체지향 Part 3 (0) 2022.07.27 [JAVA 복습] 객체지향, 배열, 연산 (1) 2022.07.26 [JAVA 공부 4일차] 객체지향 Part 2 (0) 2022.07.26 [JAVA 공부 2일차] if문, 반복문, 배열 (0) 2022.07.22 [JAVA 공부 1일차] JAVA 실행 순서 및 타입, 연산, 문자열 (1) 2022.07.21