[객체지향프로그래밍(OOP)]---> 객체지향언어인 "JAVA" 를 사용
[객체지향언어] -> 메서드에게 주어(주체)가 생기는 것
[객체지향언어의 4가지 특징]
1. 추상화 : 객체들의 공통되는 특징을 코딩할 수 있다! 객체들의 설계(틀)를 제공할 수 있다!
2. 정보은닉
1) 새로운 것을 개발할 때, 기존의 것을 그대로 활용할 수 있음
--> 기존의 것이 어떤 기능을 하는지만 알면 된다!
기존의 것에 대한 성분분석 X(알면 좋음)
2) 개발 이후 이슈가 발생했을 때, 접합부분만 검사하면 된다.
--> 개발 시간 / 비용 단축 (함수를 쓰는 이유와 동일.)
==> 유지보수 용이 ★
3. 상속 : 개발완료된 코드를 새로 개발하는 코드에 전부 가져올 수 있음
4. 다형성 : 함수(메서드)를 수행하는 주체(주어, 수행대상)가 어떤 객체인지에 따라 다른 수행결과가 나올 수 있다! ★★★★★
ex ) add() --> 절차지향언어에서는 함수 수행결과를 바꿀 수 없다. 하지만 객체지향은 가능
강아지.울음() 멍멍, 고양이.울음() 야옹
--> 객체지향언어에서는 메서드 수행결과가 다를 수 있다. (함수 앞에 대상이 붙음)
[클래스(class)] : 기본단위. 객체를 생성하기 위한 틀이자 하나의 자료형처럼 쓰인다.
ex. 포켓몬, 학생, 자동차 등..
[객체] : 클래스를 통해 생성되는 것.
ex. 피카츄, 파이리, 홍길동 ..
[생성자] : 객체의 멤버 변수를 초기화함. 객체를 생성하면서 초기화 해준다.
■ 특징 : 기본 생성자 제공, 클래스명과 생성자 동일
■ 자바는 인자가 없는 생성자, 즉 디폴트 생성자를 기본으로 제공해준다. (선언을 하지 않아도 쓸 수 있는 유일한 함수)
하지만, 개발자가 매개변수가 있는 생성자를 단 하나라도 생성해줄 시 기본 생성자를 기본으로 생성하지 않는다.
■ 생성자는 수행결과, 객체를 무조건 반환하기 때문에 output을 따로 기입하지 않는다.
■ 생성자 오버로딩 : 같은 이름을 가진 생성자를 매개변수의 타입과 인자를 달리하여 여러 개 생성함.
---> 기본 생성자를 사용할 수 없다. 기본 생성자를 따로 선언해줘도 OK
예를 들어, 회원가입 란을 만들 때 필수적인 정보가 있고, 아닌 것이 있는데 필수정보인 것만 받아서 회원정보를 생성하도록 매개변수를 가진 생성자를 생성할 수 있다.
[this] : "자기 자신 객체"
class Student {
String name;
int score;
}
라는 클래스가 있을 때,
Student(String name) {
name = name;
}
하면 student 클래스가 가지는 name을 받아오는 name으로 생성하는건데 변수명이 동일해 둘 다 받아오는 name으로 인식하기 때문에 this.name = name; 을 이용해 객체가 가지는 자기 자신 객체 name에 받아온 name을 대입하는거라고 구분해준다.

point.x ~ 이런식으로 써야 안에 있는 값 확인 가능
point는 객체라서 힙 메모리에 저장된 주소(해시코드)가 나옴
[객체 문제 풀이]
1) 원 클래스를 선언해주세요. 원 객체들은 이름과 반지름, 넓이를 가집니다. 넓이는 반지름x반지름x3.14로 계산합니다.
예를들어,도넛은(는) 반지름이 1입니다. 도넛의 넓이는 3.14입니다. 피자은(는) 반지름이 10입니다. 피자의 넓이는 314.0입니다.

package class06;
class Circle {
String name;
int radius;
double area;
Circle(String name,int radius) {
this.name=name;
this.radius=radius;
this.area=this.radius*this.radius*3.14;
}
void printCircleInfo() { // 클래스 속 메소드 선언 방법 알아두기
System.out.println("원 이름 : "+this.name);
System.out.println("반지름 : "+this.radius);
System.out.println("넓이 : "+this.area);
}
}
public class Test01T {
public static void main(String[] args) {
Circle c1=new Circle("도넛",1);
Circle c2=new Circle("피자",10);
c1.printCircleInfo(); // 함수화 이용하기
c2.printCircleInfo();
}
}
■ 멤버변수 초기화는 생성자의 역할이므로, 클래스 내에서 멤버변수 초기화 하지 않기
2) 책 객체들을 저장하고싶습니다. 책이란, 제목과 작가로 구성되어있습니다.
만약 작가를 알수없는 책이라면 작가의 이름을 작자미상으로 설정해주세요.
class Book {
String title;
String writer;
Book(String title){
this.title=title;
this.writer="작자미상";
}
Book(String title,String writer){
this.title=title;
this.writer=writer;
}
}
public class Test02 {
public static void main(String[] args) {
Book book01=new Book("해리포터","JK롤링");
Book book02=new Book("춘향전");
System.out.println(book01.title+" "+book01.writer);
System.out.println(book02.title+" "+book02.writer);
}
}
3) 상품 객체들을 다룰 예정입니다. 상품은 이름,가격,재고가 있습니다.
만약 재고를 설정하지 않으면 0개가 기본설정되도록 해주세요.
package class06;
class Product {
String name;
int price;
int count;
Product(String name,int price) {
this.name=name;
this.price=price;
this.count=0;
}
Product(String name,int price,int count) {
this.name=name;
this.price=price;
this.count=count;
}
}
public class Test03 {
}
4) 자동차 클래스를 구현해주세요. 자동차는 현재 속도를 보여줄 수 있고,
모든 자동차들은 최대 속도가 120을 넘길수없습니다.
[내가 작성한 코드]
package class06;
class Car {
String name;
int speed;
Car(String name, int speed) {
this.name = name;
this.speed = speed;
// if(speed > 120) {
// this.speed = 120;
// }
}
}
public class Test04 {
public static void main(String[] args) {
Car car01 = new Car("쏘나타", 80);
Car car02 = new Car("제네시스", 150);
if(!isRight(car01.name, car01.speed)) {
System.out.println(car01.name + "의 속도는 " + car01.speed + "km 입니다.");
}
if(!isRight(car02.name, car02.speed)) {
System.out.println(car02.name + "의 속도는 " + car02.speed + "km 입니다.");}
System.out.println(car02.speed);
}
public static boolean isRight(String name, int speed) {
if(speed > 120) {
System.out.println(name +"의 속도를 " + speed + "km로 입력하셨습니다. \n최대 속도는 120을 넘길 수 없습니다! 속도가 120km로 제한됩니다." );
speed = 120;
return true;
}
return false;
}
}
[강사님 코드]
package class06;
class Car2 {
int currSpeed;
int maxSpeed;
Car2(int currSpeed) {
this.currSpeed = currSpeed;
this.maxSpeed = 120;
if(this.currSpeed > this.maxSpeed) {
this.currSpeed = this.maxSpeed;
System.out.println("모든 자동차들은 최대 속도가 " + this.maxSpeed + "을 넘길 수 없습니다.");
}
}
}
public class Test04T {
public static void main(String[] args) {
}
}
어떻게 해야할지 많이 고민했던 문제...
메인 함수를 최대한 건드리지 않으면서 최대한 함수화 하는 연습하기!!!
'IT > JAVA' 카테고리의 다른 글
Java Section 07 : 클래스 (0) | 2025.01.14 |
---|---|
[Day 10] 객체와 생성자 (0) | 2025.01.13 |
[JAVA] 배열, 함수, 삽입정렬 (0) | 2025.01.08 |
Java Section 06 : 배열 (0) | 2025.01.07 |
[Day 7] 함수 (1) | 2025.01.07 |