728x90

[조건]

  • 각각의 클래스 생성
  • 샌드위치 재료를 표시하는 메소드 정의
  • 공통 부분은 오버라이딩
public static void main(String[] args){
    Sandwich sandwiches = new Sandwich[3];
    sandwiches[0] = new EggSandwich();
    sandwiches[1] = new ChickenSandwich();
    sandwiches[2] = new BeefSandwich();

    for(Sandwich sandwich : sandwiches){
        sandwich.cook();
        System.out.println("-------------");
    }
}

class EggSandwich{
    public String name;

    public EggSandwich(){
        this("계란 샌드위치")
    }

    public EggSandwich(String name){
        this.name = name;
    }

    public void cook(){
        System.out.println(this.name + "의 재료는?");
        System.out.println("식빵");
        System.out.println("양상추");
        System.out.println("피클");
        System.out.println("계란");
    }
}

class ChickenSandwich extends EggSandwich{
    public ChickenSandwich(){
        super("치킨 샌드위치")
    }

	@Overriding
    public void cook(){
        super.cook();
        System.out.println("치킨");
    }
}

class BeefSandwich extends EggSandwich{
    public BeefSandwich(){
        super("소고기 샌드위치")
    }

    @Overriding
     public void cook(){
        super.cook();
        System.out.println("소고기");
    }
}

[반성할 점]

  • 오버라이딩 후 부모 클래스의 메소드를 가져올때 super.메소드 이름을 하여 가져올 수 있다.
728x90

'Java' 카테고리의 다른 글

인터페이스  (0) 2023.06.08
추상클래스  (0) 2023.06.08
클래스 - 3  (0) 2023.06.07
클래스 - 2  (0) 2023.06.07
클래스 - 1  (0) 2023.06.07
728x90

1. 접근제어자(Access Modifier)

private 해당 클래스 내에서만 접근 가능
public 모든 클래스에서 접근 가능
default 같은 패키지 내에서만 접근 가능 (접근 제어자가 없을 경우 default)
protected 같은 패키지 내에서, 다른 패키지인 경우 자식 클래스에서 접근 가능
  • 멤버 또는 클래스에 사용되어 해당하는 멤버 또는 클래스를 외부에서 접근하지 못하도록 제한하는 역할을 함
  • 접근제어자는 클래스 / 멤버변수 / 메서드 / 생성자에서 사용된다.
  • 클래스 내부에서 선언된 데이터를 보호하기 위해 사용함(객체지향의 캡슐화에 해당됨)
  • 데이터를 외부에서 함부로 변경하지 못하도록 하기 위함

 

2. 상속(Inheritance)

  • 자식 클래스가 부모 클래스의 기능을 사용할 수 있는 것.
  • 접근 제어자가 private을 갖는 필드나 메서드는 상속 불가
  • 패키지가 다를 경우 접근제어자가 default인 경우 상속 불가
  • 중복된 코드를 줄일 수 있고, 유지보수가 편리한 장점이 있음
public class Cafe{
    String coffee;
    int price;
    
    public void menu(){
    	System.out.println(coffe + "는 " + price + "원 입니다.");
    }
}

public class HelloCafe extends Cafe{
    HelloCafe(String coffee, int price){
        this.coffee = coffee;
        this.price = price;
    }
}

public static void main(String[] args){
    HelloCafe hc = new HelloCafe("아메리카노", 1500);
    hc.menu();
}

// 출력결과 ==> 아메리카노는 1500원 입니다.

 

3. 메소드 오버라이딩

  • 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하여 사용하는 것.
  • 부모 메소드의 이름, 리턴 타입, 매개변수의 개수, 자료형과 순서를 동일하게 해야한다.
  • 자식 클래스에서 부모의 메소드를 수정해야할 때 사용한다.
  • 부모 메소드는 은닉되고, 자식 클래스에서 재정의된 메소드만 호출된다.(super로 부모 메소드 호출 가능)
public class Exercise {
	public String name;
    
    public Exercise(){
    	this("운동")
    }
    
    public Exercise(String name){
    	this.name = name;
    }
    
    public void effective(){
    	System.out.println(this.name + "의 주요 효과는 다이어트입니다.");
    }
}

public class Soccer extends Exercise {
    public Soccer(){
        super("축구");
    }

    @Override
    public void effective(){
        System.out.println(this.name + "의 주요 효과는 심폐지구력 향상입니다.");
    }
}

 

4. 열거형(Enum)

  • 클래스 처럼 보이게 하는 상수, 서로 관련 있는 상수들끼리 모아 상수들을 정의 한 것이다.
  • 열거형으로 선언된 순서에 따라 0부터 index의 값을 가진다.
  • 열거형으로 지정된 상수는 모두 대문자로 선언한다.
  • 열거형 변수 선언 후 세미콜론은 사용하지 않는다.
  • 상수와 특정 값을 연결 시킬 경우 마지막에 세미콜론을 붙여주어야 한다.
enum Phone{
    GB(512), TB(1);

    private final int capacity;

    Phone(int capacity){
        this.capacity = capacity
    }
    
    public int getCapacity(){
    	return capacity;
    }
}

public static void main(String[] args){
    Phone phone = Phone.GB;
    System.out.println("휴대폰의 용량은 " + phone);

    for(Phone cp : Phone.values()){
        System.out.println("휴대폰의 용량은 " + cp.getCapacity);
    }

}
728x90

'Java' 카테고리의 다른 글

추상클래스  (0) 2023.06.08
클래스 - 샌드위치 만들기  (0) 2023.06.07
클래스 - 2  (0) 2023.06.07
클래스 - 1  (0) 2023.06.07
메소드 - 개인정보 일부 비공개 하기  (0) 2023.06.07
728x90

1. 메소드 오버로딩

  • 같은 이름의 메소드를 여러 번 선언
  • 매개변수의 타입이나, 개수가 달라야 한다.
  • 매번 메소드를 호출할 때마다 값을 넣어주지 않고 고정 하고 싶다면 info(값) 처럼 작성할 수 있음
void info(String manufacture, int capacity){
    System.out.println("휴대폰 제조사는 " + manufacture + " 입니다");
    System.out.println("휴대폰 용량은 " + capacity + "GB 입니다");
}

void info(){
    info("애플", 256); // 위의 info 메소드 호출
}

 

2. 클래스 메소드

static void serviceCenter(){
    System.out.println("서비스 센터의 전화번호는 02-1234-1234 입니다");
}

// 사용법
클래스이름.메소드이름(); // 호출 가능
  • static이 붙지 않은 메소드는 객체마다 서로 다른 동작을 한다.(인스턴스 변수의 값이 다르기 때문에)
  • static이 붙은 클래스 메소드는 항상 같은 동작만 한다.
  • 객체를 생성하지 않더라도 호출할 수 있다.
  • 메소드 내에서 인스턴스 변수가 사용되지 않을 경우,
  • 전달 받은 값만 처리하고 반환하려고 할때  클래스 메소드를 사용한다.

 

3. This

public class Phone {
    String name;

    void phoneInfo(String name){
        this.name += name;
    }
}

public static void main(String[] args){
	Phone phone = new Phone();
	phone.name = "아이폰14Pro";
	phone.phonInfo(" 2023년형");
}

// 출력 결과 ==> 아이폰14Pro 2023년형
  • 객체, 자기 자신을 나타낸다
  • this.name은 클래스 인스턴스 변수로 선언된 name을 말한다.
  • name은 전달 값으로 전달 받은 String name을 나타낸다.

 

4. 생성자(Constructor)

  • new연산자를 통해 인스턴스가 생성될 때 호출되고 제일 먼저 실행되는 메서드
  • 인스턴스 변수를 초기화 시키는 역할을 한다.
  • new 연산자가 인스턴스 생성 하는 것 (생성자가 인스턴스 생성하는 것은 아님!)
  • 생성자가 정의 되어 있지 않을 경우 컴파일러가 알아서 기본 생성자를 추가해서 컴파일 한다.
// 클래스이름(){}
Phone(){ // 기본 생성자

}

// 클래스이름(매개변수){}
Phone(String name, int capacity){ // 매개변수가 있는 생성자
    this.name = name;
    this.capacity = capacity;
}

 

5. Getter & Setter

  • OOP에서는 객체 외부에서 직접적인 접근을 막는다.
    • 외부에서 데이터를 읽고 변경 시 객체의 무결성이 깨질 수 있기 때문
    • 메소드를 통해 데이터를 변경한다.
  • 접근제어자 private은 해당 클래스 내에서만 접근 가능함
  • Setter : private으로 선언된 변수의 값을 수정할때 사용
  • Getter : 데이터를 읽어올때 사용
class Phone(){
    private String name;
    private int capacity;

    public String getName(){
        return name;
    }

    public String setName(String name){
        this.name = name;
    }

     public int getcapacity(){
        return capacity;
    }

    public int setcapacity(int capacity){
        this.capacity = capacity;
    }
}

public static void main(String[] args){
    Phone phone = new Phone();
    phone.setName("아이폰14Pro Max");
    phone.setCapacity(512);

    System.out.println("이름 : " + phone.getName());
    System.out.println("용량 : " + phone.getCapacity() + "GB");
}

 

728x90

'Java' 카테고리의 다른 글

클래스 - 샌드위치 만들기  (0) 2023.06.07
클래스 - 3  (0) 2023.06.07
클래스 - 1  (0) 2023.06.07
메소드 - 개인정보 일부 비공개 하기  (0) 2023.06.07
배열 - 신발 사이즈 옵션 출력하기  (0) 2023.06.07
728x90

1. 클래스

  • 흔히 설계도와 같다고 이야기 함
  • 객체를 생성하는데 사용됨
class Phone{
	String name = "아이폰";
	int price = 1000000;
	String color = "화이트";
}

 

2. 객체지향 프로그래밍 (OOP, Object-Oriented Programming)

  • 객체 지향은 유지보수에 용이하다.
  • 높은 재사용성의 특징이 있다.

 

3. 객체

  • 객체는 클래스의 인스턴스
  • 실재로 존재하는 것, 사물 또는 개념
  • 생성 방법 👉 클래스명 변수명 = new 클래스명();

 

4. 인스턴스(Instance)

  • 인스턴스는 클래스의 객체가 메모리에 할당되어 실제로 존재하는 상태를 의미
Phone phone = new Phone(); // 객체 생성(인스턴스)
phone.name = "아이폰"; // 인스턴스의 멤버변수에 접근
phone.price = "1000000";
phone.color = "화이트";

 

5. new 연산자

  • 인스턴스를 생성해주는 역할
  • 메모리에 데이터를 저장할 공간을 할당 받아
  • 할당 받은 공간에 참조값을 객체에 반환하여 생성자를 호출한다.

 

6. 메서드

  • 함수(function)라고도 한다.
  • 특정 작업(기능)을 처리하기 위해 정의한 코드들의 묶음
  • 반환 타입이 void가 아닐 경우 꼭! return(반환값)이 있어야 한다.
반환타입 메소드이름(자료형 변수명, ...){
	// 구현 코드
}
728x90

'Java' 카테고리의 다른 글

클래스 - 3  (0) 2023.06.07
클래스 - 2  (0) 2023.06.07
메소드 - 개인정보 일부 비공개 하기  (0) 2023.06.07
배열 - 신발 사이즈 옵션 출력하기  (0) 2023.06.07
제어문 - 주차 정산 프로그램 만들기  (0) 2023.06.07
728x90

[조건]

  • 개인 정보를 비공개 하는 메소드 작성

[예시]

홍길동 -> 홍**

230607-1234567 -> 230607-*******

010-1234-5678 -> 010-1234-****

 

[차근 차근 생각해보기]

  1. 개인 정보 비공개 메소드 만들기
  2. String 타입의 정보(info)와, int 타입의 비공개 시작 위치(split)을 매개 변수로 넘겨주기
  3. info의 길이만큼 돌면서 split의 위치부터 *로 치환하기
  4. return 하여 출력하기
public static void main(String[] args){
    String name = "홍길동";
    String id = "230607-1234567";
    String phone = "010-1234-5678";

    System.out.println("이름 = " + hidden(name, 1);
    System.out.println("이름 = " + hidden(id, 7);
    System.out.println("이름 = " + hidden(phone, 9);
}
public static String hidden(String info, int split){
    String result = info.substring(0, split);
    String str = info.substring(split);

    for(int i = 0; i < str.length(); i++){
        result += "*";
    }
    return result;
}

 

[반성해야할 점]

for(int i = 0; i < str.length(); i++){
    str += "*";
}
  • 맨 처음에 위와 같은 코드로 작성했음 (str에 *을 더해줘야 한다고 생각)
  • str은 길동이 나오게 되는데 위와 같은 코드로 작성하게 되면 길동* -> 길동** 이런 식으로 반복되게 됨.
  • 때문에 result에 *을 더해주어야 str의 길이 만큼 *이 더해지게 된다.
  • 즉, 정리하자면 연산할 변수를 잘못 파악하였음😭
728x90

'Java' 카테고리의 다른 글

클래스 - 3  (0) 2023.06.07
클래스 - 2  (0) 2023.06.07
클래스 - 1  (0) 2023.06.07
배열 - 신발 사이즈 옵션 출력하기  (0) 2023.06.07
제어문 - 주차 정산 프로그램 만들기  (0) 2023.06.07
728x90

[조건]

- 신발 사이즈는 250부터 295까지 5단위로 증가

- 신발 사이즈 수는 총 10가지

 

[차근 차근 생각해보기]

1. 신발을 담은 배열 먼저 생성하기 (배열의 길이는 10)

2. 배열의 길이까지 돌면서

3. 신발 사이즈 출력하기

 

int[] sizeArray = new int[10] // 신발을 담은 배열 생성

int size = 250; // 사이즈는 250부터 시작하기 때문에

for(int i = 0; i < sizeArray.length; i++{
    sizeArry[i] = size; // sizeArry[i]에 size를 넣어주고
    size += 5; 	// 반복할 때마다 size에 5를 더한다.
}

for(int i = 0; i < sizeArray.length; i++){
    System.out.println("사이즈 " + sizeArra[i] + " (재고있음)");
}

 

[반성할 점]

- 처음엔 for문 안에 계산과 출력을 한번에 해주었음

- 계산과 출력을 한번에 넣기 보다는 각각 분리해주는 것이 좋음 (단일 책임 원칙)

728x90

'Java' 카테고리의 다른 글

클래스 - 3  (0) 2023.06.07
클래스 - 2  (0) 2023.06.07
클래스 - 1  (0) 2023.06.07
메소드 - 개인정보 일부 비공개 하기  (0) 2023.06.07
제어문 - 주차 정산 프로그램 만들기  (0) 2023.06.07
728x90

[조건]

- 주차 요금은 시간 당 5,000원

- 경차 or 장애인은 최종 주차 요금의 50% 할인 됨

- 일 주차 최대 요금은 30,000원

 

[예시]

일반 차량 3시간 주차 => 15,000원

경차 10시간 주차 => 15,000원

장애인 3시간 주차 => 7,500원

 

Scanner sc = new Scanner(System.in);
int time = sc.nextInt();
String type = sc.next();

int hour = 5000; // 시간당 요금
int max = 30000; // 최대 요금
int parking = 0; // 최종 요금

parking = hour * time;

if(parking >= max) {
    parking = max;
}

if(type.equals("경차")|| type.equals("장애인)){
    parking /= 2;
}

System.out.println("주차 요금은 " + parking + "원 입니다.");

[반성할 점]

- 코드의 흐름을 생각하면서 하기!

- 중복 되는 코드는 최대한 줄여가며 보기 쉬운 코드 만들기

 

728x90

'Java' 카테고리의 다른 글

클래스 - 3  (0) 2023.06.07
클래스 - 2  (0) 2023.06.07
클래스 - 1  (0) 2023.06.07
메소드 - 개인정보 일부 비공개 하기  (0) 2023.06.07
배열 - 신발 사이즈 옵션 출력하기  (0) 2023.06.07

+ Recent posts