Abstract / Interface

์ด๋™์–ธยท2024๋…„ 7์›” 20์ผ

new world

๋ชฉ๋ก ๋ณด๊ธฐ
8/62
post-thumbnail

7.16(ํ™”)

1. Override / overload

  • Override
    ๐Ÿ‘‰ ๋ฎ์–ด์“ด๋‹ค -> ์ƒ์† / ์ธํ„ฐํŽ˜์ด์Šค์ธ ๊ฒฝ์šฐ์—๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • overload
    ๐Ÿ‘‰ ํ•œ ํด๋ž˜์Šค ๋‚ด์—์„œ ์ด๋ฆ„์ด ๋˜‘๊ฐ™์€ ๋ฉ”์„œ๋“œ๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ.

  • ์ƒ์„ฑ์ž ์˜ค๋ฒ„๋กœ๋”ฉ
    ๐Ÿ‘‰ ์ƒ์„ฑ์ž๊ฐ€ name๊ณผ age๊ฐ€ ์žˆ์„๋•Œ ๋˜‘๊ฐ™์€ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด์„œ name์˜ ์ƒ์„ฑ์ž๋งŒ ์ดˆ๊ธฐํ™” ํ•˜๋Š”๊ฒƒ.


    2. final

    ๐Ÿ‘‰ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ : ์ƒ์†์ด ๊ธˆ์ง€๋จ -> ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ์ฐพ์œผ๋‹ˆ ์„ฑ๋Šฅ ํ–ฅ์ƒ
    ๐Ÿ‘‰ ๋ณ€์ˆ˜์—์„œ ์‚ฌ์šฉ : ๋ณ€์ˆ˜์•ˆ์˜ ๋‚ด์šฉ๋ฌผ์„ ๋‹ค๋ฅธ๊ณณ์—์„œ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅ
    ๐Ÿ‘‰ ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉ : ํ•˜์œ„ํด๋ž˜์Šค์—์„œ override ๋ถˆ๊ฐ€๋Šฅ



    3. java.lang.object ๊ด€๋ จ Method

  • LifeCycle Method
    ๐Ÿ‘‰ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ์šฉ๋˜๋ฉฐ ์†Œ๋ฉธํ•˜๋Š” ๊ณผ์ •
    ๐Ÿ‘‰ heap์˜์–ต์— ํ• ๋‹น, ํ˜ธ์ถœ๋˜์–ด ์‚ฌ์šฉ, GC์— ์˜ํ•ด ์ œ๊ฑฐ

  • ์ž๋ฃŒ๊ตฌ์กฐ Method
    ๐Ÿ‘‰ equals Method : ๊ฐ์ฒด์˜ ๋™๋“ฑ์„ฑ ๋น„๊ต
    ๐Ÿ‘‰ hashCode Method : ํ•ด์‹œ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ํ•ด์‹œ๊ธฐ๋ฐ˜ ์ปฌ๋ ‰์…˜์—์„œ ๊ฐ์ฒด ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ
    ๐Ÿ‘‰ toString Method : ๊ฐ์ฒด์˜ ์ •๋ณด๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ถœ๋ ฅ



    4. abstract(์ถ”์ƒํ™”)

    ๐Ÿ‘‰ ํ•œ ํด๋ž˜์Šค์— abstract ๋ฉ”์†Œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋Š” abstract class๋กœ ๋งŒ๋“ค์–ด์ค˜์•ผํ•จ.
    ๐Ÿ‘‰ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ๋Š” ํ•ด๋‹น ๋ฉ”์†Œ๋“œ ์ƒ์†์„ ๊ฐ•์ œํ•œ๋‹ค.
    ๐Ÿ‘‰ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋Š” ํ•˜์œ„ํด๋ž˜์Šค์—์„œ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•ด์•ผํ•˜๋‹ˆ private์„ ์–ธ์‹œ ์˜ค๋ฅ˜๋ฐœ์ƒ.
    ๐Ÿ‘‰ ์ถ”์ƒํด๋ž˜์Šค๋Š” ์ธ์Šคํ„ด์Šค,๊ฐ์ฒด๋ฅผ ์ง์ ‘์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์—†์Œ.



5. ํ”ผ์ž๋งŒ๋“ค๊ธฐ & CRUD ํ”„๋กœ์ ํŠธ

- CommonUI

public abstract class CommonUI {

    private Scanner scanner;

    public CommonUI(Scanner scanner) {
        this.scanner = scanner;
    }

    public abstract void execute();


    public void print(String msg){
        System.out.println(msg);
    }

    protected String inputStr(String msg){
        print(msg);
        return scanner.nextLine();
    }

    protected int inputInt(String msg){
        return Integer.parseInt(inputStr(msg));
    }
}

๐Ÿ‘† execute๋ผ๋Š” ์ถ”์ƒ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ CommonUI๋Š” ์ถ”์ƒํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝ๋จ
๐Ÿ‘† execute ์ถ”์ƒ๋ฉ”์†Œ๋“œ๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋“œ์‹œ overrideํ•˜์—ฌ ๋‹คํ˜•์„ฑ์„ ์ด๋ฃธ.
๐Ÿ‘† print, inputStr, inputInt ๋ฉ”์†Œ๋“œ๋ฅผ ์ƒ์„ฑํ›„ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ์ƒ์†ํ•˜์—ฌ ์ฝ”๋“œ์˜ ์ˆ˜๋ฅผ ์ค„์ž„.

- CreateUI


public class CreateUI extends CommonUI{

    public CreateUI(Scanner scanner) {
        super(scanner);
    }

    @Override
    public void execute() {
        print("Welcome to Pizza Creation UI");
    }
}

๐Ÿ‘† CommonUI๋ฅผ extendsํ•˜๊ณ , Scanner๋ฅผ super, execute๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ๋‹ค.

- TotalUI

public class TotalUI extends CommonUI{

    private CommonUI[] uiArr;

    public TotalUI(Scanner scanner, CommonUI[] uiArr) {
        super(scanner);
        this.uiArr = uiArr;
    }

    @Override
    public void execute() {

        int oper = inputInt("0:create \t 1:read \t 2:update \t 3:delete \t -1:EXIT");

        if(oper == -1){
            return;
        }
        uiArr[oper].execute();

        execute();//recursive
    }
}



6. Interface

๐Ÿ‘‰ public Static final
๐Ÿ‘‰ ์‹ค์ œ ์ฝ”๋“œ์—์„œ๋Š” public, static, final์— ๋Œ€ํ•œ ์ฝ”๋“œ๊ฐ€ ์—†์ง€๋งŒ, interface๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์•”๋ฌต์ ์œผ๋กœ interfaceํ•„๋“œ์— ์žˆ๋Š” ๋ณ€์ˆ˜๋Š” public, static, final์— ํ•ด๋‹น๋œ๋‹ค.
๐Ÿ‘‰ Interface๋Š” ์„ค๊ณ„๋ฅผ ์œ„ํ•จ์œผ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ๊ผญ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๋ณ€์ˆ˜๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ public, ํด๋ž˜์Šค๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ด ๋˜๋ฏ€๋กœ static, ์ •ํ•ด์ง„ ๋ณ€์ˆ˜๋Š” ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ์ƒ์ˆ˜๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ final์ด๋‹ค.



7. Salary ํ”„๋กœ์ ํŠธ

- CalcSalary

public interface CalcSalary {

    String getName();
    double calcMonth();
}

- ContractWorker

public class ContractWorker implements CalcSalary {

    private double yearPay;

    private String name;

    public ContractWorker(String name, double yearPay) {
        this.yearPay = yearPay;
        this.name = name;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public double calcMonth() {
        return (yearPay/12) * 0.65; //์›”๊ธ‰๊ณ„์‚ฐ
    }
}

- freelenser

public class Freelancer implements CalcSalary{

    private String name;

    private int month;

    public Freelancer(String name, int month) {
        this.name = name;
        this.month = month;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public double calcMonth() {
        return month*0.967; //์„ธ๊ธˆ์ œ์™ธ
    }
}

- Parttimer

public class PartTimer implements CalcSalary{

    private int hourPay;

    private int time;

    private String name;

    public PartTimer(String name, int hourPay, int time) {
        this.hourPay = hourPay;
        this.time = time;
        this.name = name;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public double calcMonth() {
        return hourPay * time; //์‹œ๊ธ‰๊ณ„์‚ฐ
    }
}

- Main

public class SalaryMain {
    public static void main(String[] args) throws FileNotFoundException {


        File file = new File("list.txt"); //ํŒŒ์ผ์—ด๊ธฐ ๊ฐ์ฒด
        Scanner scanner = new Scanner(file);

        java.util.List<CalcSalary> empList = new ArrayList<CalcSalary>();

        while (scanner.hasNextLine()) { //๋‹ค์Œ์— ์ฝ์„ ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€
            String line = scanner.nextLine(); //๋‹ค์Œ ํ•œ ์ค„ ์ฝ๊ธฐ
            System.out.println(line);

            //split - ๋ฐฐ์—ด๋กœ
            String[] arr = line.split(","); //ํ•ด๋‹น ์ค„์„ , ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ฐฐ์—ด์— ๋„ฃ๊ธฐ

            if(arr[0].equals("A")){ //์ด ์ง์› ํŒŒํŠธํƒ€์ด๋จธ
                empList.add(new PartTimer( arr[1], Integer.parseInt(arr[2]), Integer.parseInt(arr[3])));
            }else if(arr[0].equals("C")){
                empList.add(new ContractWorker( arr[1], Integer.parseInt(arr[2])));
            }else if(arr[0].equals("F")){
                empList.add(new Freelancer(arr[1], Integer.parseInt(arr[2])));
            }

        }//while true
        scanner.close(); //ํŒŒ์ผ ์—ฐ๊ฒฐ ๋
        System.out.println("--------------------------------");
        empList.forEach( emp -> System.out.println( emp.getName()+": " + emp.calcMonth()) );

//list.txt
//A, Messi,9980,95
//A, Ronaldo,9980,60
//C, Neymar,50000000
//C, Neymar1,50000000
//C, Neymar2,50000000
//F, SON,5600000
    }
}

7. Servlet

- tomcat์„œ๋ฒ„ ์—ฐ๊ฒฐํ•˜๊ธฐ
1. https://tomcat.apache.org/ ์—์„œ tomcat10 download ํ•˜๊ธฐ
2. 10.1.26 zip file ์ฐพ๊ธฐ ์‰ฌ์šด๊ณณ์— ์••์ถ•ํ’€๊ธฐ
3. ์ธํ…”๋ฆฌ์ œ์ด new project โ†’ jakarta ee โ†’ template (web application) โ†’ gradle โ†’ application server โ†’ new โ†’tomcat server โ†’ tomcat home( tomcatํด๋” bin ๋ฐ”๋กœ ์ „๊นŒ์ง€) โ†’ servlet ํ™•์ธํ›„ creat โ†’ tomcat ์„ ํƒ config โ†’ deployment โ†’ run
4. ์œ„์— tomcat๋‹ค์‹œ ์„ ํƒ โ†’ deployment โ†’ ๊ธฐ์กด์—์žˆ๋Š”๊ฑฐ -๋กœ ์ง€์šฐ๊ณ  โ†’ newํ•ด์„œ exploded ์ƒ์„ฑ โ†’ application context๋Š” / ๋งŒ ๋‚จ๊ฒจ๋†”์„œ ํŽธํ•˜๊ฒŒ ํ•œ๋‹ค.
5. tomcat์—์„œ serverํƒญ ๋ˆ„๋ฅด๊ณ  update action์„ update classes and resources ๋‘๊ฐœ๋‹ค ๋ณ€๊ฒฝํ•ด์คŒ.



8. Map์„ ์ด์šฉํ•˜๊ธฐ

๐Ÿ‘‰ Scanner ์ด์šฉํ•ด์„œ file๋ฐ์ดํ„ฐ๋ฅผ ๋ผ์ธ๋‹จ์œ„๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
ํ•ด๋‹น ๋‚ด์šฉ์„ ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•ด์„œ, ๊ฐ ์•ŒํŒŒ๋ฒณ์ด ๋ช‡๋ฒˆ์”ฉ ๋‚˜์˜ค๋Š”์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ฌธ์ œ.

- CharCounter

public class CharCounter {
    private int count;

    public int getCount(){
        return count;
    }

    public void inc(){
        count++;
    }

}

- main

public class ReadingFile2 {

    public static void main(String[] args) throws FileNotFoundException {

        CharCounter charcounter = new CharCounter();


        File file = new File("Alpha.txt"); //ํ•ด๋‹น ํŒŒ์ผ์—ด๊ธฐ

        Map<Character, Integer> map = new HashMap<>(); //map๊ฐ์ฒด ์ƒ์„ฑ, key = ๋ฌธ์ž value = ์ •์ˆ˜

        Scanner scanner = new Scanner(file);
        while (scanner.hasNextLine()) { //๋‹ค์Œ ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€ ํŒŒ์•… ํ•˜๋ฉด์„œ while

            String line = scanner.nextLine().toLowerCase(); //ํ•ด๋‹น ์ค„์˜ ๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ

            for (char c : line.toCharArray()) { // ๋ฌธ์ž์—ด line์„ ๋ฌธ์ž ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
                int ascii = (int) c; //์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ
                if (ascii < 97 || ascii > 122) { //a= 97 ,z = 122
                    continue;
                }
                map.put(c, map.getOrDefault(c, 0) + 1); //๋งŒ์•ฝ ๊ฐ’์ด ์žˆ์œผ๋ฉด ์ €์žฅํ•˜๊ณ  ์•„๋‹ˆ๋ฉด 0
                charcounter.inc();
            }
        }

        scanner.close();


        for (Map.Entry<Character, Integer> entry : map.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

0๊ฐœ์˜ ๋Œ“๊ธ€