728x90
반응형

1) 정처기 카운트다운 프로그램 만들기

 

1-1) java 버전 : 계속해서 시간 카운트하고 따로 페이지가 뜨는게 아니라 바로 파이썬으로 변경

더보기

package java0328;

import java.time.Duration;

import java.time.LocalDateTime;

public class Countdown {

public static void main(String[] args) {

LocalDateTime endDateTime = LocalDateTime.of(2023, 5, 13, 0, 0, 0);

LocalDateTime nowDateTime;

while (true) {

nowDateTime = LocalDateTime.now();

if (nowDateTime.isAfter(endDateTime)) {

System.out.println("Time's up!");

break;

}

Duration duration = Duration.between(nowDateTime, endDateTime);

long days = duration.toDays();

long hours = duration.toHours() % 24;

long minutes = duration.toMinutes() % 60;

long seconds = duration.getSeconds() % 60;

String remainingTime = String.format("%02d:%02d:%02d:%02d", days, hours, minutes, seconds);

System.out.println(remainingTime);

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

 

}

나오는 결과는 

시간이 지날수록 점점 작아진다

 

1-2) python버전 : GUI를 이용해서 만드면 따로 페이지를 만들 수 있다

import tkinter as tk
import datetime


class CountdownApp:
    def __init__(self, master):
        self.master = master
        self.master.title("정보처리기사 필기 합격 가보자고!")
        self.end_date = datetime.datetime(2023, 5, 13)
        self.remaining_time_str = tk.StringVar(value=self.get_remaining_time())
        self.remaining_time_label = tk.Label(
            self.master,
            textvariable=self.remaining_time_str,
            font=("Arial", 64),
            fg="blue",
            bg="gray",
        )
        self.remaining_time_label.pack(pady=20)

        # Create image label
        self.image_label = tk.Label(self.master)
        self.image_label.pack(pady=10)

        self.message_label = tk.Label(
            self.master,
            text="조수현 아자아자 화이팅!",
            font=("Arial", 24),
            fg="white",
            bg="green",
        )
        self.message_label.pack(pady=10)

        # Load image and set it to the image label
        self.kakao_image = tk.PhotoImage(file="D:\chosuhyeon\school class\python\py0328\shsu.png")
        self.image_label.configure(image=self.kakao_image)

        self.countdown()

    def get_remaining_time(self):
        remaining = self.end_date - datetime.datetime.now()
        days, seconds = remaining.days, remaining.seconds
        hours = seconds // 3600
        minutes = (seconds % 3600) // 60
        seconds = seconds % 60
        remaining_time = f"{days:02}:{hours:02}:{minutes:02}:{seconds:02}"
        return remaining_time

    def countdown(self):
        self.remaining_time_str.set(self.get_remaining_time())
        if datetime.datetime.now() >= self.end_date:
            self.remaining_time_str.set("Time's up!")
            return
        self.master.after(1000, self.countdown)


if __name__ == "__main__":
    root = tk.Tk()
    app = CountdownApp(root)
    root.mainloop()

정보처리기사를 합격하고

자하는 염원을 담아 chat gpt한테 물어보았고 상세히 알려주심요~~

나온결과는

좋아하는 최고심 캐릭터를 넣어보았습니당💥💥


2) 패키지

 

2-1) 의미

  • 클래스 파일을 묶어서 관리하기 위한 수단으로 파일 시스템의 폴더를 이용
  • 패키지에 의한 장점

- 패키지마다 별도의 이름 공간이 생기기 때문에 클래스 이름의 유일성을 보장

- 클래스를 패키지 단위로도 제어할 수 있기 때문에 좀 더 세밀하게 접근 제어

 

2-2) 패키지 선언

  • 주석문을 제외하고 반드시 첫 행에 선언해야 한다. 
  • 패키지 이름은 모두 소문자로 명명하는 것이 관례이며, 대개 회사의 도메인 이름을 역순으로 사용한다. 

2-3) import문

  • 패키지의 경로를 미리 컴파일러에게 알려주는 문장
  • import 문은 소스 파일에서 package 문과 첫 번째 클래스 선언부 사이에 위치

import문 예제

2-4) 상속과 접근 제어

 

- 접근 지정자의 접근 범위

접근 지정자 동일클래스 동일 패키지 자식 클래스 다른 패키지
public o o o o
protected o o o x
default(없음) o o x x
private o x x x

자바하면서 정말 중요하다고 말씀해주신 부분이 몇 없었는데 정말 강조하신거 중에 하나에요~~ 아좌좌 다 외워보장

 

- 접근 지정자 사용 시 주의 사항

  • private 멤버는 자식 클래스에 상속되지 않는다
  • 클래스 멤버는 어떤 접근 지정자로도 지정할 수 있지만, 클래스는 protected, private으로 지정할 수 없다
  • 메서드를 오버라이딩할 때 부모 클래스의 메서드보다 가시성을 더 좁게 할 수는 없다

2-5) final 클래스

- final 메서드는 더 이상 오버라이딩할 수 없는 종단의 메서드이다

=> 따라서 부모 클래스에서 정의한 final 메서드를 자식 클래스는 수정 없이 그대로 사용하여야 한다.

- final 클래스는 클래스 내부의 모든 메서드를 오버라이딩할 수 없고 특정 메서드만 오버라이딩하지 않도록 하려면 final 메서드로 선언하면된다.

728x90
반응형
728x90
반응형

1) 연산자

 

1-1) 연산자란?

      특정한 작업을 하기 위해서 사용하는 기호

 

1-2) 연산자의 종류 : 대입, 산술, 비교, 논리

 

1-3) 산술 연산자 : 수학적인 계산에 사용되는 연산자

        +  (더하기)   - (빼기)       *(곱하기)     /(나누기)      %(나머지)

 

1-4) 단항 연산자 : 좌항과 우항이 있지 않은 연산자 ex) +3, -3

   

+ : 양수를 표현한다 / 실제로 사용할 필요가 없다

- : 음수를 표현한다

++ : 증가 연산자로 항의 값을 1씩 증가시킨다

- -  : 감소 연산자로 다음 항에서 값을 1씩 감소시킨다.

 

더보기

public static void main(String[] args) {

// result의 값은 3

int result = 1 + 2;

System.out.println(result);

// result의 값은 2

result = result - 1;

System.out.println(result);

// result의 값은 4

result = result * 2;

System.out.println(result);

// result의 값은 2

result = result / 2;

System.out.println(result);

// result의 값은 10

result = result + 8;

System.out.println(result);

답은

 

3

2

4

2

10

 

더보기

public static void main(String[] args) {

int i = 3;

i++;

System.out.println(i); // 4 출력

++i;

System.out.println(i); // 5출력

System.out.println(++i); // 6출력

System.out.println(i++); // 6출력

System.out.println(i); // 출력

}

답은 

 

4

5

6

6

7

 

1-5) 연산자 우선순위 : 정처기 필기때는 조금 중요하지만 실제로 코딩에서는 외울 필요가 없다고 함.. 

2) 상속

 

2-1)  상속의 필요성 : (a)의 경우라면 클래스마다 중복된 내용을 두어야 하고, 이와 같은 필드나 메서드를 수정할 때는 3개클래스 모두에서 해야하지만 이는 중복된 코드를 발생시키고, 유지 보수하기 어렵게 만든다. 따라서, 중복되는 코드를 클래스마다 두기보다는 한곳으로 통합해서 별도의 클래스로 두면 코드도 간결하고 관리하기 편하다

a) 상속을 사용하기 전

b) 상속을 적용한 후

2-2) 상속이란?

- 자식 클래스는 부모 클래스에서 물려받은 멤버를 그대로 사용하거나 변경할 수 있고 새로운 멤버를 추가할 수 이싿. 

- 따라서 자식 클래스는 대체로 부모 클래스보다 속성이나 동작이 많다.

 

2-3) 상속의 선언

: 자식 클래스는 부모 클래스로부터 확장된다는 의미로 extneds 키워드를 사용해 상속 관계를 선언한다.

- 다중 상속은 안됨(한번에 두개 이상 나열은 안됨) 하지만 인터페이스를 통하여 다중 상속의 효과를 얻을 수 있다고도 함

 

2-4) 메서드 오버라이딩

: 부모클래스의 메서드가 자식 클래스에 적합하지 않은다면 자식 클래스는 물려받은 메서드를 자신에게 맞도록 수정할 수 있는데, 이른 메서드 오버라이딩이라고 한다.(오버로딩 개념과 비교해서 알아두기!!)

 

- 규칙

  • 부모 클래스의 메서드와 동일한 시그니처르 사용한다(심지어 반환 타입까지 동일해야 한다)
  • 부모 클래스의 메서드보다 접근 범위를 더 좁게 수정할 수 없다
  • 추가적인 예외가 발생할 수 있음을 나타낼 수 없다

- 버라이딩 불가 항목

  • private 메서드 : 부모 클래스 전용이므로 자식 클래스에 상속되지 않는다.
  • 정적 메서드 : 클래스 소속이므로 자식 클래스가 오버라이딩할 수 없다. 
  • final 메서드 : final 메서드는 더 이상 수정될 수 없으므로 자식 클래스가 오버라이딩 할 수 없다.

- 부모 클래스의 멤버 접근

  • 자식 클래스가 메서드를 오버라이딩하면 자식 객체는 부모 클래스의 오버라이딩된 메서드를 숨긴다
  • 그 숨겨진 메소드를 호출해야 할 때가 있는데, 그때 super 키워드를 사용한다.
  • super는 현재 객체에서 부모 클래스의 참조를 의미

상속은 패키지를 따로 만들어 그안에 각각의 클래스와 main이 들어간 클래스를 만들어 주면 수행하기 더 쉽다!!

 

2-5) 오버로딩

- 오버라이딩과 상당히 유사하면서도 큰 차이가 있다. (상속과는 무관하다)

- 오버로딩은 동일한 클래스에 이름은 같지만 시그니처가 하나라도 다른 여러 개의 메서드를 중복해서 정의하는 것이다.

 

비교 요소 메서드 오버라이딩 메서드 오버로딩
메서드 이름 동일 동일
매개 변수 동일 다르다
반환 타입 동일 관계없다
상속 관계 필요 필요없다
예외와 접근 범위 제약이 있다 제약이 없다
바인딩 호출할 메서드를 실행 중 결정하는 동적 바인딩이다 호출할 메서드를 커파일할 때 결정하는 정적 바인딩이다

 

 

728x90
반응형
728x90
반응형

1) 배열 응용 - 메인 메서드의 매개변수 전달(명령창에서의 실행 명령)

 

더보기

package sec03;

public class MainArgumentDemo {
                  public static void main(String[] args) {
                                  if (args.length == 2) {
                                                   int i = Integer.parseInt(args[1]);
                                                   nPrintln(args[0], i);
                                   } else
                                                   System.out.println("어이쿠!");
                    }

                     public static void nPrintln(String s, int n) {
                                     for (int i = 0; i < n; i++)
                                                     System.out.println(s);
                     }
}

원래는 어이쿠!가 나왔는데, 안녕! 안녕! 안녕! 이 나오기 위해서 변경해줘야 하는 부분이 있다.

다음의 과정을 해줘야하는데,

 

1. [Run] -> [Run Configurations] 을 선택 한 후

2. [Arguments]를 클릭하고

3. [Program arguments]에 안녕! 3이라는 인수를 입력하여야 한다 

**뛰어쓰기 올바르지 않으면 실행결과가 바뀌지 않으므로 정확히 입력해야한다~~ 

 

< 최종결과 >

 

2) 가변 개수 인수 

 

- JDK 5부터는 메서드에도 데이터 타입이 같은 가변 개수(variable length)의 인수를 전달 가능

 ex) 데이터 타입 ...(가변 개수 데이터 타입을 나타낸다) 변수

- 한 개의 가변 개수 매개변수만 사용 가능하며 가변 개수 매개변수는 마지막에 위치

- 가변 개수 인수를 가진 메서드를 호출하면 내부적으로 배열을 생성하여 처리

 

더보기

package sec03;

public class VarArgsDemo {
                     public static void main(String[] args) {
                                        printSum(1, 2, 3, 4, 5);
                                        printSum(10, 20, 30);

                      }

                       public static void printSum(int... v) {
                                      int sum = 0;
                                      for (int i : v)
                                                      sum += i;
                                      System.out.println(sum);
                        }
}

< 최종 결과 >

=> 초기값이 없으면 바로 메인으로 넘어간다. for문을 통해서 i의 값을 합해서 저장하므로 답은 15, 60

 

3) 객체의 배열

 

- 객체 배열은 객체를 참조하는 주소를 원소로 구성

ex) Ball 클래스의 객체로 구성된 배열을 선언하고 초기화

      Ball [ ] balls = new Ball[5]; => 5개의 Ball 객체를 참조할 변수를 준비  

- 생성자를 호출하여 Ball 객체를 생성해야 함

 

4) 열거 타입

4-1) 필요성

 

- 제한된 수의 일이나 사건 등에 대하여 숫자로 표현

  • 각 숫자에 대하여 부여된 의미를 개발자가 숙지 => 일이나 사건에 대한 경우의 수가 많다면 개발자 관점에서 불편
  • 부여되지 않은 의미 없는 숫자 => 컴파일러는 알 수 없다.
  • 출력 값이 의미 없는 숫자로 표현

- 제한된 사건에 대하여 숫자 대신에 상수를 정의해서 부여 : 숫자에 부여된 의미를 개발자가 알 수 있지만, 여전히 나머지 문제가 미결

- 자바 5부터 열거 타입을 제공

ex)

package sec04;

public class ConstantDemo {
    public static void main(String[] args) {
        final int MALE = 0;
        final int FEMALE = 1;
        final int SOUTH = 1;
        int gender = FEMALE;
        if (gender == MALE)
            System.out.println(MALE + "은(는) 병역 의무가 있다.");
        else
            System.out.println(FEMALE + "은(는) 병역 의무가 없다.");

        if (gender == SOUTH)
            System.out.println(SOUTH + "은(는) 누구?");
        gender = 5;
    }
}

< 최종 결과 >

여기서 1은 남성 혹은 여성을 의미하는 단어가 아니라 숫자가 출력됨

4-2) 열거 타입과 응용

 

- 열거 타입 : 서로 연관된 사건들을 모아 상수로 정의한 java.lang.Enum 클래스의 자식 클래스

- 선언 : enum 열거타입이름 { 상수목록 }

ex) enum Gender {MALE, FEMALE} - enum :열거 타입을 정의하기 위한 키워드 / Gender : 열거 타입 이름 /

      MALE, FEMALE : 상수 목록

-  일종의 클래스 타입인 열거 타입도 생성자, 필드 및 메서드를 가질 수 있다.

- 열거 타입 상수는 생성자에 의한 인스턴스이다.- 이때 생성자, 필드 및 메서드와 열거 타입 상수를 구분하기 위해서 뒤에 반드시 (;) 를 추가해야한다.

 

++ 특수문자 원주율 쓰는 법

 

[ㅎ]을 누른 후 한자를 누르면 특수문자표가 나오는데 주르륵 내리면 <<<<  π >>>>> 가 있습니다 !!!

3.14로 적어도 되겠지만 파이 기호로 써야할 일도 있으니까 참고하세여~~ 

728x90
반응형
728x90
반응형

오늘은 1교시부터 갑자기 쪽지 시험 아닌 쪽지 시험을 쳤는데..

구글링을 하거나 챗 지피티를 하거나 뭐든 사용해서 교수님이 내주신 예제 문제 5가지를 푸는 거였습니다.

파이썬, 자바 뭐든 사용해도 좋다고 해서 조금 더 아는 자바를 선택하고 구글링과 저의 조그만 지식으로 해결해보았습니다.

더보기

  예제는 아래와 같습니다. 💥💥💥💥💥

1. 1~10까지의 숫자 더해서 출력하기

2. 1~100까지의 숫자 중 짝수만 출력하기

3. 랜덤 숫자 중에 골라서 소수의 갯수를 카운트하기

4. 랜덤 숫자 입력하여 피보나치 수열을 작성하기

5. 10진수를 넣었을 때 2진수로 표현하고, 우측 쉬프트 1번 하기

1) 1~10까지의 숫자 더해서 출력하기 

   

public class exam {

      public static void main(String[] args) {

             int i = 1;

              // 합계를 담을 변수

              int sum = 0;

              while (i <= 10) {

                     // 합계 변수에 i를 누적시킨다.

                     sum = sum + i;

                      // sum +=i;로도 쓸 수 있다.

                      i++;

               }

               System.out.println("1부터 10까지의 합은 " + sum + "입니다.");

        }

}

=> while 반복문을 사용하여 1부터 10까지의 수를 반복하여 실행하고 sum 변수에 이를 더하여 합계를 출력하였다.

1부터 10까지의 합은 55입니다.

 

2) 1~100까지의 숫자 중 짝수만 출력하기

 

public class exam2 {

       public static void main(String[] args) {

              int i = 0;

               // 100까지 이므로 i<=100까지로 설정

               // 짝수만 출력되게 해야하므로 i=i+2로 2씩 증가

                for (i = 2; i <= 100; i = i + 2) {

                      // 화면 출력부

                       if (i <= 100)

                          System.out.println(i + " ");

                }

        }

}

=> for 반복문을 사용하여 100까지의 숫자 중에 짝수의 값을 반복하여 실행하고 그대로 출력하였다.

print를 사용하면 한줄에 다 표현해주고, println을 사용하면 한줄에 하나씩만 출력한다.

2

4

6

8

...

 

3) 랜덤 숫자 중에 골라서 소수의 갯수를 카운트하기

import java.util.Scanner;

public class exan3_2 {

       public static void main(String[] args) {

               System.out.println("입력된 숫자까지의 소수 구하기");

               System.out.print("입력 : ");

                int inNum = 0;

                Scanner scan = new Scanner(System.in);

                inNum = scan.nextInt();

                // 소수 개수 저장할 변수 초기화

                int count = 0;

                // ------------------------------

                // 입력된 숫자까지의 소수 구하기

                // ------------------------------

                 for (int i = 2; i <= inNum; ++i) {

                      for (int j = 2; j <= i; ++j) { // j가 i까지 반복되도록 수정

                           if (i % j == 0) {

                               if (i == j) {

                                  System.out.print(i + " "); // 개행이 아닌 공백으로 수정

                                   count++; // 소수를 찾았으므로 count 증가

                               } else {

                                    break;

                               }

                            }

                        }

                      }

                      System.out.printf("\n1부터 %d까지의 소수 개수는 %d개 입니다.", inNum, count); 

         }

}

=> 입력하게 만들기 위해서 Scanner 생성, 2이상부터 소수이므로 초기값은 2!! for 반복문을 통하여 숫자는 inNum과 count에 저장, 처음에는 입력한 숫자에 대한 소수의 인수를 구하는것인 줄 알았는데 소수의 개수를 구하는 것이었다.

입력된 숫자까지의 소수 구하기

입력 : 45

2 3 5 7 11 13 17 19 23 29 31 37 41 43

1부터 45까지의 소수 개수는 14개 입니다.

4) 랜덤 숫자 입력하여 피보나치 수열을 작성하기

 

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class exam4 {

        public static void main(String[] args) {
               Scanner scan = new Scanner(System.in);
                ArrayList<Integer> Fibonacci = new ArrayList<>(Arrays.asList(0, 1));

                int inputData, m, n, i = 0;

                while (true) {
                      System.out.println("양의 정수를 입력하시오:");
                      inputData = scan.nextInt();

                      if (inputData > 0) {
                          break;
                       } else {
                             System.out.println("잘못된 정수를 입력하셨습니다. 다시 입력하세요.\n");
                       }
                }
                while (true) {
                      m = Fibonacci.get(i);
                      n = Fibonacci.get(i + 1);

                      if (m + n > inputData) {
                          break;
                      } else {
                           Fibonacci.add(m + n);
                            i++;
                      }
             }

            System.out.println(String.format("%d 까지의 피보나치 수열은 다음과 같습니다.\n", inputData) + Fibonacci);
      }
}

 

=> 피보 나치 수열은 앞의 두값을 더해서 나온 값이 다음 값이 되는 수열이다.  

양의 정수를 입력하시오:

4

4 까지의 피보나치 수열은 다음과 같습니다.

[0, 1, 1, 2, 3]

5) 10진수를 넣었을 때 2진수로 표현하고, 우측 쉬프트 1번 하기

 

import java.util.Scanner;

public class exam5 {

        public static void main(String[] args) {

               Scanner scanner = new Scanner(System.in);

                // 10진수 입력 받기

                System.out.print("10진수를 입력하세요: ");

                int decimal = scanner.nextInt();

                 // 10진수를 2진수로 변환하여 출력

                 System.out.printf("%d의 2진수 표현: %s\n", decimal, Integer.toBinaryString(decimal));

                  // 우측으로 1번 시프트하여 출력

                  int shifted = decimal >> 1;

                  System.out.printf("%d을 우측으로 1번 시프트한 결과: %d\n", decimal, shifted);

      }

}

=> 2진수로 표현하기 위해 : 계속 나누어줌 - %2 / 우측으로 1번 시프트한 결과 - int shifted = decimal >>1; 로 표현

728x90
반응형
728x90
반응형

\ : 역슬러쉬 (w모양)

\n : 다음줄에 출력(줄바꿈)

더보기

1) 정수와 실수 & 문자열

실수 : double      ex) 1.1(소수점이 있으면)

정수 : int

문자열 : String

 

String first(변수 선언)

first = "coding" (변수 할당)

* Striing을 int나 double로 바꾸면 에러 생김 🤣

 String first = "coding"(위에 두줄을 한줄로)

package java0317;

public class StringDemo {

      public static void main(String[] args) {

            String a, b;

            a = "coding";

            b = "everbody";

            System.out.println(a + b);

       }

}

결과는 (+는 자료의 연결 역할)

codingeverbody

2) 변수 사용의 이유 : 재활용성을 높이기 위해서

 

ex) 변수 사용 안했을 때,

  •  System.out.println(100+10);
  •  System.out.println((100+10) / 10);
  • System.out.println(((100+10) / 10) - 10);
  • System.out.println((((100+10) / 10) - 10) * 10);

 

 ex2) 변수 사용 했을 때,👍👍👍

     int a = 100;

  • System.out.println(a+10);
  • System.out.println((a+10) / 10);
  • System.out.println(((a+10) / 10) - 10);
  • System.out.println((((a+10) / 10) - 10) * 10);

* 고정적인 수를 제외한 것을 변수로 놓지 않았을 때는 코드를 다시 짜야하는

재활용성이 낮으므로 가변적인 것은 변수로 설정하는 것이 좋다.🙌

 

 

3) 주석(comment) : 로직에 대한 설명이나 코드를 비활성화 할 때 사용한다.

주석은 프로그래밍적으로 해석되지 않는다.  (주석 표현하기 : //)

주석을 여러줄로 적을 떄,

/*

 a= ~~~~

 b= ~~~~

System. ~~~

*/

 

4) 세미콜론(;) : 문장의 끝을 의미한다. 

  • 자바에서는 문장의 끝에 세미콜론을 사용하지 않으면 컴파일 에러가 발생한다.
  • 세미콜론을 이용하면 여러개의 문장을 한 줄에 표현할 수 있다.

ex) int a = 10=; double b = 10.1;

728x90
반응형
728x90
반응형

1. 객체지향 ?

- 개념 : 소프트웨어 객체는 현실 세계의 객체를 필드와 메서드로 모델링한 것

소프트웨어 객체는 필드(Field)로 정의하고, 동작은 메서드(Method)로 정의

필드는 객체 내분에 선언된 변수를 의미하고, 메서드는 객체 내부에 정의된 동작

 

- 프로그래밍 : 소프트웨어의 규모가 커지면서 동작과 분리되어 전 과정에서 서로 복잡하게 얽혀 있는 데이터를 사용했기 때문에 절파 지향 프로그래밍 방식의 한계로 생성

절차 지향 프로그램은 추후 변경하거나 확장하기도 어려움

현실세계를 객체 단위로 프로그래밍하며, 객체는 필드와 메서드르 하나로 묶어 표현

 

- 특징(정보처리기사 문제로도 자주 출제됨!!)

1. 캡슐화(정보은닉) : 관련된 필드와 메서드를 하나의 캡슐처럼 포장해 세부 내용을 외부에서 알 수 없도록 감추는 것

2. 상속 : 자녀가 부모 재산을 상속받아 사용하듯이 상위 객체를 상속받은 하위 객체가 상위 객체의 메서드와 필드를 사용하는 것

3. 다형성 : 대입되는 객체에 따라서 메서드를 다르게 동작하도록 구현하는 기술, 실행 도중 동일한 이름의 다양한 구현체 중에서 메서드를 선택 가능(다양성과는 다름)

4. 추상화 : 현실 세계의 객체에서 불필요한 속성을 제거하고 중요한 정보만 클래스로 표현하는 일종의 모델링 기법

 

더보기

- 클래스 선언

class 클래스 이름 {       => 클래스를 선언하기 위한 키워드

  // 필드                         => 객체의 속성을 나타낸다

  // 메서드                     => 객체의 동작을 나타낸다

 

ex)

public class Ball {

   double radius = 2.0;

   double getVolume() {

      return 4 / 3 * 3.14 * radius * radius * radius;

    }

}

 

public : 클래스 접근 권한으로 누구나 사용할 수 있다

class : 클래스 키워드

Ball : 클래스 이름으로 소스 파일 이름과 동일해야 한다

double radius = 2.0;  : 필드

return 4 / 3 * 3.14 *radius * radius * radius;  =>  메서드 : () 가 들어가면 메서드라고 생각하기

- 객체 생성과 참조 변수

- 한 문장으로 변수 선언과 객체 생성

 클래스 이름 변수 = new 클래스 이름();

  • 생성자 이름은 클래스 이름과 같다
  • 생성자의 반환 타입은 없다
  • 생성자는 new 연산자와 함께 사용하며, 객체를 생성할 때 호출한다
  • 생성자는 오버로딩 할 수 있다.(오버로딩(Overloading) : 같은 이름의 메서드 여러개를 가지면서 매개변수의 유형과 개수가 다르도록 하는 기술)

 

- 클래스 선언과 객체 생성 예시 문제 (기초 타입과 참조타입)

package java0316;

public class PhoneDemo {

    public static void main(String[] args) {

       Phone myPhone = new Phone();

       myPhone.model = "갤럭시 S8";

       myPhone.value = 100;

       myPhone.print();

       Phone yourPhone = new Phone();

       yourPhone.model = "G6";

        yourPhone.value = 85;

        yourPhone.print();

     }

}

class Phone {

     String model;

     int value;

     void print() {

            System.out.println(value + "만원 짜리" + model + "스마트폰");

     }

}

결과는 이렇습니다!!

100만원 짜리갤럭시 S8스마트폰

85만원 짜리G6스마트폰

- 필드와 지역 변수의 차이 : 필드는 기본 값이 있지만, 지역 변수는 기본 값이 없어 반드시 초기화(기본값이 0)

필드는 클래스 전체에서 사용할 수 있지만, 지역 변수는 선언된 블록 내부의 선언된 후에서만 사용 가능

필드와 달리 지역 변수는 final로만 지정 가능 (배열에서만 null값을 가짐)

 

- 접근자와 설정자

필요성 : 클래스 내부에 캡슐화된 멤버를 외부에서 사용할 필요

접근자와 설정자

private으로 지정된 필드에 값을 반환하는 접근자와 값을 변경하는 설정자는 공개된 메서드

일반적으로 접근자는 get, 설정자는 set으로 시작하는 이름을 사용

필드 이름을 외부와 차단해서 독립시키기 때문에 필드 이름 변경이나 데이터 검증도 가능

package java0316;

public class CircleDemo2 {

        public static void main(String[] args) {

                Circle1 myCircle = new Circle1();

                myCircle.setRadius(10.0);

                myCircle.show(myCircle.getRadius(), myCircle.findArea());

         }

}

class Circle1 {

        private double radius;

        public double getRadius() {

               return radius;

        }

        public void setRadius(double r) {

               this.radius = r;

         }

         double findArea() {

              return 3.14 * radius * radius;

         }

         void show(double x, double y) {

               System.out.printf("반지름 = %.1f, 넓이 = %.1f\n", x, y);

         }

}

결과는 ) 반지름 = 10.0, 넓이 = 314.0

- 디폴트 생성자

  • 모든 클래스는 최소한 하나의 생성자가 있음
  • 만약 생성자를 선언하지 않으면 컴파일러가 자동으로 디폴트 생성자를 추가

 

728x90
반응형
728x90
반응형

tkinter : GUI에 대한 표준 Python 인터페이스이며 Window 창을 생성할 수 있습니다.

"Tkinter 실행시키기"

더보기

1. python에 들어가서 터미널에 pip install tk를 적어 tkinter을 실행할 수 있도록 해줍니다

2. 업그레이드가 필요하면 upgrade 줄을 밑에 적어주면 된다.

3. 코딩 고우

"윈도우 창 생성하기"

더보기

import tkinter : 상단에 import tkinter를 사용하여 GUI 모듈을 포합시킵니다. tkinter 함수의 사용방법은 tkinter."를 이용하                               여 사용이 가능합니다.

window=tkinter.Tk() : 윈도우 이름=tkinter.TK()를 이용하여 가장 상위 레벨의 윈도우 창을 생성할 수 있습니다.

window.mainloop() : 윈도우 이름.mainloop()를 사용하여 윈도우 리름의 윈도우 창을 윈도우가 종료될 때 까지 실행시킵니다.

                                     생성 구문과 반복 구문 상에 위젯을 생서아고 적용합니다.

tkinter.TK()를 적용할 경우 가장 기본적인 윈도우 창이 생성됩니다.

"Window 창 설정"

더보기

import tkinter

 

window=tkinter.Tk()

 

window.title("CHO SU HYEON") : 윈도우이름.title("제목")을 이용하여 윈도우 창의 제목을 설정할 수 있습니다.

window.geometry("640x400+100+100": 윈도우이름.geometry("너비x높이+x좌표+y좌표")를 이용하여 윈도우 창

                                                                      의 너비와 높이, 초기 화면 위치의 x좌표와 y좌표를 설정할 수 있습니다.

window.resizable(False, False) : 윈도우이름.resizeable(상하, 좌우)를 이용하여 윈도우 창의 창 크기 조절 가능 여                                                          부를 설정할 수 있습니다. True로 설정할 경우 윈도우 창의 크기를 조절할 수 있                                                            습니다.

 

window.mainloop() 

 * Tip : resizeable() 을 적용할 때, True=1, False=0을 의미하여 상수를 입력해도 적용이 가능합니다.

윈도우 창의 이름이 CHO SU HYEON로 설정되었으며 크기와 초기 화면 위치, 윈도우 팡의 크기 조절 불가로 설정된 것을 확인할 수 있습니다.

 

"Widget 배치"

더보기

import tkinter

 

window=tkinter.Tk()

 

window.title("CHO SU HYEON")

window.geometry("640x400+100+100")

window.resizable(False, False)

 

label=tkinter.Label(window, text="안녕하세요.") 위젯이름=tkinter.Label(윈도우 창, text="내용")을 사용하여 윈도 우 창에 Label 위젯을 설정할 수 있습니다. / 위젯이름.pacl()을 사용하여 위젯을 배치할 수 있습니다.

label.pack() 

 

window.mainloop()

속성을 설정하지 않아 기본 속성으로 설정되어 가장 최상단에 라벨이 배치되었습니다.

 

*오늘의 에러

파일 이름을 tkinter로 설정하여 attribute 에러가 작동하여 디버깅이 되지 않았다.

다시 작동하고 나갔다 들어왔는데도 작동 안되어 파일의 제목이 오류의 주 원인이라는 말을 많이 들어서 

파일 이름을 tkinter2로 바꾸어 다시 실행해보니 다행히 실행되었다!!

 

 

728x90
반응형
728x90
반응형

프로그래밍 언어란 :  컴퓨터와 인간 사이를 연결할 수 있는 매개체이며 컴퓨터에 작업을 시키기 위한 도구

- 기계어인 저급 언어부터 자연어에 가까운 고급 언어까지 다양

- 보통 프로그래밍 언어라고 하면 고급 언어를 의미하는데 C, C++, Java ...

- 고급 언어로 작성한 소스 코드는 컴파일러라는 시스템 소프트웨어를 이용해 먼저 기계어로 구성된 실행 코드로 변환

 

1. java의 특징

- 단순하다

- 객체 지향 언어이다

- 함수형 코딩을 지원한다

- 츨랫폼 독립적이다

- 분산 처리를 지원한다

- 안전하다

- 이식성이 좋다

 

2. 활용 분야

- 웹 애플리케이션은 물론 CRM, ERP, SCM 등 기업용 애플리케이션

- 빅데이터, 클라우드, 소셜, 모바일, 사물인터넷 등 혁신 기술에서 커넥티드 카, 스마트폰 및 비디오  게임까지 일상생활과 업무 환경 전반에 밀접하게 연관

- 심지어 전 세계 해양 정보 수집, 인간 두뇌와 근골격계 연구 등에도 다양하게 활용

 

3. java 시작하기 (자바, 이클립스 설치, 프로젝트 생성, 클래스 생성 순)

자바 설치 -> 이클립스 설치 -> [File] -> [New] -> [Java Project] -> 프로젝트 이름 작성 -> 새로 작성된 프로젝트 오론손 마우스 클릭후 [New] -> [Class] 선택하면 코딩 준비 끝 !!

 

4. 저장하기

 저장은 [ctrl] + s 하거나 디스크 아이콘 누르기~~

 

5. 실행하기

실행은 [ctrl] + [F11]

실행은 단축기 보다는 Refactor 밑에 있는 화살표 누르는게 빠르다!!!

 

 

728x90
반응형

+ Recent posts