728x90

1. 추상클래스

  • 추상 클래스는 아직 완성되지 않은 클래스라고 할 수 있다.
  • 추상 클래스는 객체를 생성할 수 없고, 추상 클래스를 상속한 자식 클래스만 객체를 생성 할 수 있다.
  • 추상 클래스에는 추상 메소드를 만들 수 있다.

2. 추상 메소드

  • 추상 클래스 혹은 인터페이스에서 사용 가능한 메소드이다.
  • 껍데기만 있는 메소드라고 할 수 있다.
  • 추상 메소드는 상속한 자식 클래스에서 반드시 구현해야한다.
public abstract class AmusementPark{ // 추상 클래스
    public void isChild(){
        System.out.println("어린이가 입장합니다.")
    }

    public void isAdult(){
        System.out.println("어른이 입장합니다.")
    }

    public abstract void price(); // 추상 메소드
    
}

public class AdultTicket extends AmusementPark{
    @Override
    public void price(){ // 추상 클래스를 상속 받은 자식은 반드시 추상 메소드를 구현해야함
        System.out.println("어른의 입장료는 50000원 입니다.");
    }
}

public class ChildTicket extends AmusementPark{
    @Override
    public void price(){
        System.out.println("어린이의 입장료는 30000원 입니다.");
    }
}

위와 같이 'abstract' 키워드를 사용하여 추상 클래스와 추상 메소드를 만들 수 있다.

public static void main(String[] args){

    // AmusmentPark amusementPark = new AmusementPark();처럼 추상 클래스는 객체 생성 불가
    AdultTicket adult = new AdultTicket();
    adult.price();

    ChildTicket child = new ChildTicket();
    child.price();
}

// 출력 결과 
// 어른의 입장료는 50000원 입니다.
// 어린이의 입장료는 30000원 입니다.

메인 메소드에서는 위와 같이 사용할 수 있다.

728x90

'Java' 카테고리의 다른 글

인터페이스 - 놀이공원 티켓 구입하기  (0) 2023.06.08
인터페이스  (0) 2023.06.08
클래스 - 샌드위치 만들기  (0) 2023.06.07
클래스 - 3  (0) 2023.06.07
클래스 - 2  (0) 2023.06.07
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
728x90

파이널 프로젝트를 AWS에 배포해보려고 한다!!

먼저 AWS에 가입을 한다.
가상 머신 시작을 눌러 인스턴스 생성을 시작하자!

  1. 인스턴스 이름 설정해주기
  2. 가장 많이 사용하는 Ubuntu로 설정해준다

    ⚠️ 꼬옥 프리 티어로 선택해주기 과금은 무서워..
  3. t2.micro 프리티어로 설정해주고 새 키페어 생성으로 해준다!
  4. 스토리지는 최대로 설정 가능한 30기가로!
  5. 인스턴스 시작을 누르면
  6. 인스턴스 시작 완료!

다음 검색 해가면서 배포 시도를 해보았지만..

이런 오류가 났고..
검색해보니 내가 사용한 Oracle은 rds에서 프리티어 버전을 사용할 수 없었다고한다..
그렇게 내 첫 배포는 실패했다..

728x90
728x90
'인생의 전환점은 언제인가요?' 라고 나에게 묻는다면
나는 고등학교 시절 농구, 축구를 한 것이라고 말할 수 있다.

 

내 인생의 전환점

 나는 중학생때 우연히 구기대회로 농구를 접하면서 농구에 빠져 있던 때였다.고등학교에 진학을 하니 여자 농구, 축구팀이 있다고 하여 팀에 들어가게 되었다.

매일 같이 방과후에 농구와 축구를 하면서 운동이 내 취미가 되었고, 꿈이 없던 나는 자연스레 체대에 진학이라는 목표를 갖게 되었다.

 

 대학교에선 더 재미있었다. 다양한 스포츠를 배우고, 동아리 활동을 하면서 대회도 나가고
정말 운동은 인생에서 뗄 수 없는 습관이자 취미가 되었다.

 

개발자의 길을 택한 이유

요즘 시대엔 한가지 분야만으로 성공하기 힘든 시대가 왔다고 생각한다.
그래서 나는 과감히 체육이라는 전공은 잠시 접어두고 이전부터 관심있었던 개발이라는 분야에 뛰어들기 시작했다.

 개발을 택하기 전까진 내 인생의 최종 목표는 실버타운에서 노인분들이 운동을 쉽게 즐길 수 있는 센터를 운영하는 것이었다. 노인 체육을 하고 싶어 취업 준비를 하였지만 코로나로 공고가 나지 않아 1년을 허비하게 되었다.

그러던 중 우연히 호텔의 휘트니스센터에 들어가게 되었고, 연령층이 높으신 회원분들을 상대로 운동 지도를 하며 지냈다.

 

 그러곤 어느날 '나는 더 큰 꿈을 갖고 있는데 여기서 이러고 있으면 그 꿈을 이루지 못할 것 같다.'라는 생각이 들기 시작하였다. 그렇게 부모님과 주변 개발자 지인에게 물어보고 적성에 맞을까 고민을 하고 적성에 맞을 것 같아 과감히 회사를 그만두고 개발의 길로 뛰어들게 되었다.

 

과감히 뛰어들 수 있었던 이유는?

 21년도에 6개월동안 20키로 감량 했던 것이 나의 과감한 선택에 큰 도움이었던 것 같다. 어렸을 적 사고로 학창시절 내내 8번의 수술을 하였지만 운동을 너무 좋아하고, 잦은 부상으로 대학생때 2번의 재수술을 하게 되었다. 움직임이 없어지면서 대학 생활 동안 살이 급격하게 찌기 시작하였다. 살이찌고 취업 준비로 자존감이 바닥을 치기 시작하면서 '이왕 취업도 안되는 마당에 그냥 살이나 빼보자'라며 다이어트를 시작하게 되었다. 처음엔 1년을 목표로 다이어트를 하기 시작했다.

 

 그렇게 하루에 짧으면 2시간 길면 5-6시간씩 주6일 운동과 식단을 병행하면서 한달에 3-4키로씩 꾸준히 뺐고 6개월 만에 20키로 감량에 성공하였고 지금까지 유지중이다. 진짜 정말 힘들었다..😣

 

 하지만 목표를 이루고 나니 세상을 보는 눈이 달라졌다. 바닥을 치던 자존감을 회복하면서 긍정적으로 바뀌었고, '나' 자신과의 싸움에서 이겼는데 뭐든 다 잘 할 수 있을 것 같은 자신감도 생기기 시작하였다.

 

 이런 마인드를 갖고 있어서 그런가 1년을 허비하고 다시 개발 공부를 시작하면서 '포기하지 않을까', '실패하지 않을까' 라는 두려움은 없었다. 1년이든 2년이든 얼마가 걸려도 꼭 개발자로 성공할 것이라는 의지와 목표가 생겼고 나는 그렇게 개발의 길로 들어오게 되었다.

728x90

'주절주절' 카테고리의 다른 글

[회고] 우당탕탕 2023  (3) 2023.12.31
코끼리를 냉장고에 넣는 방법  (2) 2023.12.29
멘토링 진작 할걸..!!  (0) 2023.12.19

+ Recent posts