반응형

# 알고리즘 문제연습5

## 상수 변수 선언 (final)

  • 상수 3.141592 저장하는 변수 PI 선언
final double PI = 3.141592;

## 문자열 비교 (equals)

  • 문자열 비교 시 '=='가 아닌 'equals'를 사용한다.
String str1 = "abc";
String str2 = "abc";

if ( str1 == str2 ) {
}
if ( str1.equals(str2) ) {
	System.out.println("str1과 str2는 같은 값을 가지고 있습니다.");
}

## 문자열 붙이기 / 자르기 (concat / substring)

  • concat : 문자열 붙이기
  • substring : 문자열 자르기
String str1 = "안녕하세요. ";
String str2 = "벌써 여기까지 오셨네요. 끝까지 화이팅!!";

String concatResult;
String substringResult;

concatResult = str1.concat(str2); 
// = > 출력 : 안녕하세요. 벌써 여기까지 오셨네요. 끝까지 화이팅!!

substringResult = str1.substring(2);
// = > 출력 : 하세요.

 

## 생성자

// 매개변수가 없는 경우 name은 "이름없음", number는 0으로 초기화.
// 실행을 위한 코드입니다.
public class CarExam {
    public static void main(String[] args) {
        Car car1 = new Car();
        Car car2 = new Car("자동차");
        Car car3 = new Car("자동차", 1234);
    }
}

public class Car {
	String name;
    int number;
    
    Car(String name, int number) {
    	this.name = name;
        this.number = number;
    }
    
    Car(String name) {
    	this.name = name;
        this.number = 0;
    }
    
    Car() {
    	this("이름없음", 0);
    }

}

 

## 상속 (extends) 

// Machine 클래스를 상속받는 Car 클래스 
class Machine {
    public void turnOn() {
        System.out.println("켰습니다.");    
    }
    
    public void turnOff() {
        System.out.println("껐습니다.");    
    }
}

class Car extends Machine {

}
//아래는 실행을 위한 코드입니다. 수정하지 마세요.
public class CarExam {
    public static void main(String[] args) {
        Car car = new Car();
        if(Machine.class.isInstance(car)){
            System.out.println("정답입니다. [제출]을 누르세요.");
        }
        else{
            System.out.println("Car가 Machine을 상속받지 않았습니다.");
        }
    }
}

public abstract class Machine {
    public abstract void turnOn();
    public abstract void turnOff();
}

class Car extends Machine {
    // Machine 클래스를 상속받고, 추상 메소드를 구현하세요.
    public void turnOn() {
        
    }
    public void turnOff() {
        
    }
}

## 접근제한자 (private)

  • 클래스 내 필드가 private로 선언된 경우 해당 클래스에서만 사용 가능하다.
  • 접근제한자를 public으로 할 경우 외부에서도 사용 가능.
  • 접근제한자 : 필드 및 매소드에도 사용 가능하다.
필드에 접근제한자 예시

public class CarExam {
    public static void main(String[] args) {
        Car car = new Car("포니", 1234);
        
        System.out.println("name: " + car.name);
        System.out.println("number: " + car.number);
        
    }
}

// 기존 private 
public class Car {
    private String name;
    private int number;
    
    public Car(String name, int number) {
        this.name = name;
        this.number = number;
    }
}

// 변경 public
public class Car {
    public String name;
    public int number;
    
    public Car(String name, int number) {
        this.name = name;
        this.number = number;
    }
}
매소드에 접근제한자 예시

public class CarExam{
    public static void main(String[]args){
        Car car = new Car();
        car.run();
        car.stop();
    }
}

// 기존 매소드 private
public class Car{
    public void run(){
        System.out.println("차가 달립니다.");
    }
    
    private void stop(){
        System.out.println("차가 멈춥니다.");
    }
}

// 변경 public 
public class Car{
    public void run(){
        System.out.println("차가 달립니다.");
    }
    
    public void stop(){
        System.out.println("차가 멈춥니다.");
    }
}

 

## 추상클래스 (abstract)

추상 클래스를 상속받은 클래스는 추상 클래스가 가진 추상 메소드를 반드시 구현해야 합니다. 그렇지 않으면 해당 클래스도 추상 클래스가 됩니다. 

//아래는 실행을 위한 코드입니다. 수정하지 마세요.
public class CarExam {
    public static void main(String[] args) {
        Car car = new Car();
        if(Machine.class.isInstance(car)){
            System.out.println("정답입니다. [제출]을 누르세요.");
        }
        else{
            System.out.println("Car가 Machine을 상속받지 않았습니다.");
        }
    }
}


public abstract class Machine {
    public abstract void turnOn();
    public abstract void turnOff();
}


class Car extends Machine {
    // Machine 클래스를 상속받고, 추상 메소드를 구현하세요.
    public void turnOn() {
        
    }
    public void turnOff() {
        
    }
}

 

## 부모 클래스의 생성자 호출 (super)

  • super()를 이용하면 부모 클래스의 생성자를 호출할 수 있다.
// Bus 클래스는 Car 클래스의 자식 클래스
// Bus 클래스의 생성자는 name(이름), number(차량번호), fee(요금)을 입력받는데,
// 부모 클래스의 생성자를 이용해 name과 number를 초기화 후
// fee를 직접 초기화하는 Bus의 생성자 만들기.
//아래는 실행을 위한 코드입니다. 수정하지 마세요.
public class BusExam {
    public static void main(String[] args) {
        Bus bus = new Bus(new String("뛰뛰"), 3000, 1050);
        if(!bus.name.equals("뛰뛰")){
            System.out.println("bus의 name이 다릅니다.");
        }
        else if(bus.number != 3000){
            System.out.println("bus의 number가 다릅니다.");
        }
        else if(bus.fee != 1050){
            System.out.println("bus의 fee가 다릅니다.");
        }
        else{
            System.out.println("정답입니다. [제출]을 누르세요.");
        }
        
    }
}


public class Car {
    String name;
    int number;
    public Car(String name, int number) {
        this.name = name;
        this.number = number;
    }
}


public class Bus extends Car {
    int fee;
    
    public Bus(String name, int number, int fee) {
        // super를 이용해서 Car클래스의 생성자를 이용하세요.
        super(name,number);
        this.fee = fee;
    }
}

 

## 오버라이딩

  • 오버라이딩은 부모 클래스의 메소드를 수정하고 싶을 때 유용하게 쓰인다.
//다음은 실행을 위한 코드입니다. 수정하지 마세요.
class BusExam {
    public static void main(String [] args) {
        Bus bus = new Bus();
        bus.run();
    }  
}


public class Car {
    public void run() {
        System.out.println("차가 달립니다.");
    }
    
    public void stop() {
        System.out.println("차가 멈춥니다.");
    }
    
    public void horn() {
        System.out.println("경적을 울립니다.");
    }
}


public class Bus extends Car {
    // run 메소드를 오버라이드 하세요. 메소드의 접근 제한자는 public이어야 합니다.
    public void run() {
        System.out.println("차가 달리면서 다음 정거장을 안내합니다.");
    }
}

 

## 예외처리 (try ~ catch)

  • 프로그램 실행 중 예기치 못한 사건을 예외라고 하며, 예외 상황을 미리 예측하고 처리하는 것을 예외처리라고 한다.
public class ExceptionExam{
    public static void main(String []args){
        int [] array = new int[10];
        
        try {
            array[20] = 5;      
        } catch(Exception e) {
            
        }
        
    }
}

 

## 약수의 합

  • 자연수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수
class Solution {
  public int solution(int n) {
      int answer = 0;
      
      for ( int i = 1; i <= n; i++ ) {
          if ( n % i == 0 ) {
              answer += i;
          }
      }
    
      return answer;
  }
}
반응형

+ Recent posts