728x90
반응형

 

[문제] - [단계별로 풀어보기] 들어가면 이렇게 나옵니다! 저는 당연히 1단계부터 시작^^

 싸피 합격하고 분반 시험으로 백준을 하면 좋을 것 같아서 묵혀 놓은 아이디를 꺼내보았습니다 ㅋㅋㅋㅋ

사실 아이디 없는 줄 알고 가입하려다가 맨날 쓰는 아이디가 존재하는 아이디라고해서 찾아봤더니 있었네요 ㅋㅋㅋㅋㅋㅋ

어떻게 공부할까 하다가 단계별로 풀어보기가 있어서 그걸로 시작!!

아무래도 이런 알고리즘 공부를 하는게 처음이다 보니 단계별로 하는게 좋은거 같아요

1단계 부터 public static void main 이후로 생각이 안나서 고민해보고 하니까 내가 얼마나 몰랐는지 느껴짐...

사칙 연산까지는 Scanner(키보드 입력값) 써서 신나게 풀다가 갑자기 나를 당황하게 한 문제가 생겼는데..

아니 오잉? 어떻게 해야하나? 한참을 고민하다가

일단 입력을 해야하니까 Scanner 사용하고 문자열이니까 Scanner 쓰고 

그 다음에 a = sc.nextString(); 쳤는데 빨간줄 끄여서 생각해보니까 나도 이런거 본적 없어서 한참을 고민하다가

다시 적어서 next뒤에 자동완성으로 나오는게 뭔지 보고 nextLine이 있길래 맞는거 같아서 적었는데

처음으로 첫 시도만에 맞춰서 정말 기분이 좋았다^^ 뿌듯잼....

import java.util.Scanner;

 

public class Solution10926 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

String a;

a = sc.nextLine();

System.out.println(a + "??!");

}

}

줄 간격은 안 맞지만 고려해주시구여...

정말 별거 아니지만 맞았습니다!!가 기분이가 정말 좋다 :)

 

그러고 문자를 입력할때는 sc.nextLine인가보다 싶어서 다시한번 검색을 해봤는데,

next()랑 nextLint()이 있었다

 

이 둘의 차이는

 

더보기

next() : 문자 또는 문자열을 공백 기준으로 한단어 또는 한문자씩 입력 받음

nextLine() : 문자 또는 문장 한 라인 전체를 입력 받는다

 

 

char이랑 next / string이랑 nextLine 짝꿍이라고 생각하면 될 것 같다!!

728x90
반응형
728x90
반응형

안드로이드 무료 인강 듣고 정리해보았습니다~~

 

< 안드로이드 >

 => 툴 : 안드로이드 스튜디오  / 언어 : 자바, 코틀린 
 => 앱에 해당하는 기능 위주로 익혀서 바로 만들어보기//

<자바>

- 객체지향 언어(절차적이랑 다른 개념)
- void : 아무 값이 없다
- 오버 로드 : int add~~~ / double add~~~ : 함수가 이름이 동일한데 이것이 오류가 아니라 add라는 함수(1,2) / (1.5, 3.5) 를 처리하는 경우에 각각 알아서 처리함
- 상속 : Class Animal { /  class Cat extends Animal { : animal(부모클래스)의 속성을 모두 받고 자식이 같는 특별한 개념 또한 포함 / 위의 개념을 다 받음
- 오버 라이드 :  함수들은 동일하지만 부모의 것을 자식들이 재정의하여 사용함


<네트워크 지식>

- 동기 : 응답을 받을때까지 다음 함수로 넘어가지 않음
- 비동기 : 함수가 호출만 되면 바로 넘어감(응답은 콜백으로 받음) 
- 쿠키 : 변수를 저장하는 개념 / 클라이언트의 특정 부분, 특정 위치에 저장(파일로 남음) / 쿠키 지우기 : 임시 저장본 날리기
- Session : 변수가 서버의 위치에 저장 / 특정 시간 이후에는 값을 지움(로그인은 나갔다 들어오면 없어짐) 
- VOIP(Voice over IP) : 음성을 데이터화 한다 (ip에 의해서 전달 가능 / 데이터를 이용하여 다시 음성으로 전달) ex) 카카오톡 전화하기
-  NAT(Network Address Translate) : 모든 서버가 퍼블릭 아이디를 갖지는 않음 / 서버에는 프라이빗 아이디를 가지고 있는데 돈을 절약하고 보안을 위해 사용 / 접속을 할 수 있는 방법이 필요함
- Hash : 주민번호 같은 보호해야할 것을 변조하여 저장할 수 있게 함 / 이 값이 맞는지만 확인하고 끝남   
 

<안드로이드 스튜디오 용어>

- Build  : 하나의 언어를 apk로 만들어지는 과정
- Compile  : 우리의 언어를 컴퓨터가 알아들을 수 있는 언어로
- Layout : .xml에서 구성 = 배치도(버튼, 박스, 지도...)
- Activity : 안드로이드 앱은 결국 액티비티 = 화면 자체를 말함 / layout을 품고 있다
- Event : 버튼을 누른다, 어떤 함수를 실행해라 (기능)
- App : 주로 여러개의 activity들의 합(compile)  

< 화면 레이아웃 구성의 두가지 방법 >

- Linear Layout : 순차적으로 배치 (가로 혹은 세로), 방향을 잡아줌, 배치가 됨
- Relative Layout : 하나를 중심으로 어떤것의 위에 아래, 옆에(상대적으로 배치됨)

< 실행하기 >

1. 안드로이드 스튜디오 다운 받기
2. 가상의 화면 만들기(안드로이드 폰 없으니까 컴터롱 / 나중에는 화면에도 해봐야함)
3. 샘플 앱 실행 해보기(알아서 깔림)

728x90
반응형
728x90
반응형

1) 패키지와 API 문서

 

1-1) 자바 라이브러리 

  • 개발자가 편리하게 사용할 수 있도록 패키지 혹은 모듈을 압축한 파일

 

1-2) 패키지와 모듈

  • 패키지 : 상호 관련 있는 클래스와 인터페이스를 한 곳에 묶어 놓은 것
  • 모듈 : 밀접한 관계가 있는 패키지와 리소스를 묶어 놓은 것, JDK를 설치하면 jmods 폴더에 jmod 파일을 제공하는데 jmod 파일이 모듈 파일

 

1-3) 자바의 주요 패키지 및 모듈

 

1-4) API 문서

  • 자바는 이런 패키지를 개발자가 사용할 수 있도록 API 형태로 제공하다
  • 사용자는 API로부터 필요한 패키지를 임포트하면 모니터와 키보드를 쉽게 조작하는 프로그램을 작성할 수 있다
  • JDK에 포함된 라이브러리는 매우 방대하기 때문에 개발자가 모두 기억할 수 없으므로 패키지를 올바르게 사용하려면 개발자는 API 문서를 자주 참조해야한다

주소 : https://docs.oracle.com/en/java/javase/14/docs/api

- 교수님이 계속 모르는거 있으면 java.api 보라고 강조를 하신다. 대부분 영어라 해석하기 힘들어서 구글링이나 chat gpt를 많이 찾아보는데 언젠가 영어 실력과 코딩 실력을 키워서 api만들 이용하여 만들어도 보고 싶다!!

 

2) java.lang 패키지

 

2-1) 필수 패키지

  • java.lang 패키지는 자바 프로그램에서 가장 기본이 되는 클래스와 인터페이스를 보관
  • import 문 없이 사용

 

2-2) Object 클래스

  • 모든 클래스의 조상
  • Object 클래스가 제공하는 주요 메서드

 

2-3) Class 클래스

  • 실행 중인 자바 프로그램 내부에 포함된 클래스와 인터페이스 정보를 제공하려고 getName(), getSimpleName() 등 다양한 메서드를 제공
  • Class 클래스는 생성자가 없고 어떤 객체라도 생성하면  JVM이 대응하는 Class 객체를 자동으로 생성
  • 실행 도중 객체 정보를 얻으려면  getClass()의 결과인 Class 객체를 사용
  • ex) 주어진 obj객체에서 Class 객체를 얻으려면 

 

2-4) Math 클래스

  • 모든 메서드가 static이기 때문에 객체를 생성하지 않고 메서드 호출
  • Math 클래스가 제공하는 주요 double 타입의 메서드

public class MathDemo {

        public static void main(String[] args) {

              System.out.println("Math.pow(2,8):" + Math.pow(2, 8));

              System.out.println("Math.random():" + Math.random());

              System.out.println("Math.sin(Math.PI):" + Math.sin(Math.PI));

              System.out.println("Math.min(10,20):" + Math.min(10, 20));

       }

}

답은

Math.pow(2,8):256.0

Math.random():0.5957544835893684

Math.sin(Math.PI):1.2246467991473532E-16

Math.min(10,20):10

 

2-5) System 클래스

  • 표준 입출력을 비롯한 실행 시스템과 관련된 필드와 메서드를 static으로 제공
  • System.out.println()도 System 클래스가 제공하는 메서드
  • System 클래스의 세가지 필드

 

  • 자바에서 운영체제로부터 할당받은 메모리를 JVM이 관리
  • JVM은 메모리가 부족하거나 주기적으로 가비지 컬렉터를 사용해 가비지를 수거
  • 가비지를 수거하는 순서는 객체의 생성 순서와는 무관
  • 프로그램에서 가비지 컬렉터를 직접 호출 불가, 대신에 System.gc()로 JVM에 가능하면 빨리 가비지 컬렉터를 실행하도록 요청 가능

class Garbage {

        public int no;

        public Garbage(int no) {

               this.no = no;

               System.out.printf("Garbage(%d)생성\n", no);

         }

         protected void finalize() {

                 System.out.printf("Garbage(%d)수거\n", no);

         }

         }

public class GarbageDemo {

       public static void main(String[] args) {

              for (int i = 0; i < 3; i++)

                    new Garbage(i);

       }

}

답은

Garbage(0)생성

Garbage(1)생성

Garbage(2)생성

가비지의 생성 순서와 수거 순서는 무관하다!!

 

2-6) 포장 클래스

  • 대부분의 기본 패키지가 제공하는 클래스의 메서드는 참조 타입을 매개변수로 사용하기 때문에 기초 타입을 사용하면 객체 지향 언어의 특징을 이용 불가
  • 자바는 기초 타입을 포장해 클래스화 한 포장 클래스(wrapper class)를 제공해서 기초 타입 데이터도 기본 패키지를 활용하도록 함
  • 모든 기초 타입에 대응하는 포장 클래스가 있으며, int와 char 타입에 대응하는 포장 클래스는 각각 Integer와 Character이며, 나머지 포장 클래스의 이름은 기초 타입의 첫 영문자를 대문자로 바꾼 것이다
  • Integer 클래스가 제공하는 주요 메서드

  • 기초 타입 데이터를 포장해 객체화하는 것을 박싱(boxing), 반대 과정을 언박싱(unboxing)

  • 박싱을 수행하려면 포장 클래스의 생성자나 valueOf()메서드를 사용한다
더보기

Interger bi = new Integer(10);      // 박싱

Integer bi = Integer.valueOf(10)   // 박싱

public class WrapperDemo {

       public static void main(String[] args) {

              Integer bi1 = new Integer(10);           // Integer 타입 객체를 생성한다

              int i1 = bi1.intValue();                         // Integer 타입을 int 타입으로 변환한다    

              double d = bi1.doubleValue();            // Integer 타입을 double 타입으로 변환한다

              Integer bi2 = 20;                                 // 자동 박싱이다

               int i2 = bi2 + 20;                                 // 자동 언박싱이다

               String s1 = Double.toString(3.14);     // double 타입 데이터를 String 타입으로 변환한다

               Float pi = Float.parseFloat("3.14");   // String 타입 데이터를 Float 타입으로 변환한다

               Integer bi3 = Integer.valueOf("11", 16);  // 16진수 숫자 문자열을 10진수 Integer 타입으로 변환한다

               System.out.println(bi3);

        }

}

답은

17

 

728x90
반응형
728x90
반응형

1) 문자열

 

1-1) 문자열의 선언과 생성

  • 문자열은 String 타입을 사용하므로  String 타입의 변수를 먼저 선언해야 한다
  • String 타입의 변수는 다음과 같이 큰따음표(" ")로 감싸서 나타낸 문자열 리터럴을 사용하여 초기화할 수 있다

String 타입도 변수 선언과 동시에 초기화할 수 있다

  • 문자열 리터럴은 내부적으로 new String()을 호출해 생성한 객체이다
  • 따라서 s1은 new String("안녕, 자바!")를 호출해서 생성한 객체를 가리킨다
  • 그러나 내용이 같은 문자열 리터럴(프로그램에서 직접 표현한 값)이라면 더 이상 새로운 String 객체를 생성하지 않은 채 기존 리터럴을 공유, 따라서 s1과 s2는 동일한 String객체를 가진다

 

1-2) 문자열의 비교

 

  • ==나 != 연산자는 두 문자열의 내용을 비교하는 것이 아니라 동일한 객체인지를 검사한다

public class String1Demo {

       public static void main(String[] args) {

              String s1 = "Hi, Java!";

              String s2 = "Hi, Java!";

              String s3 = new String("Hi, Java!");

              String s4 = new String("Hi, Java!");

 

              System.out.println("s1 == s2 ->" + (s1 == s2));

              System.out.println("s1 == s3 ->" + (s1 == s3));

              System.out.println("s3 == s4 ->" + (s3 == s4));

 

               s1 = s3;

               System.out.println("s1 == s3 ->" + (s1 == s3));

       }

}

답은

s1 == s2 ->true

s1 == s3 ->false

s3 == s4 ->false

s1 == s3 ->true

  • s1, s2 변수는 내용이 같은 리터럴이므로 동일한 객체이다
  • s3, s4 변수는 내용은 같지만, 생성자로 생성한 객체이기 때문에 다른 객체이다

 

1-3) 문자열의 다양한 연산

 

 

public class String3Demo {

       public static void main(String[] args) {

              String s1 = new String("Hi,");

              String s2 = new String(" Java");

 

              System.out.println("문자열 길이(s1) : " + s1.length());

              System.out.println(s1.charAt(1));

 

               s1 = s1.concat(s2);

 

               System.out.println(s1.concat(s2) + "!");

               System.out.println(s1.toLowerCase() + "!");

               System.out.println(s1.substring(4, 8) + "!");

 

               String s3 = " ";

               System.out.println(s3.isEmpty());

               System.out.println(s3.isBlank());

 

               String s4 = "";

               System.out.println(s4.isEmpty());

               System.out.println(s4.isBlank());

 

               String s5 = "*-*";

               System.out.println(s5.repeat(10));

               System.out.println(s2.trim().indexOf("v"));

       }

}

답은

문자열 길이(s1) : 3

i

Hi, Java Java!

hi, java!

Java!

false

true

true

true

*-**-**-**-**-**-**-**-**-**-*

2

나머지는 위에 표를 보고 그대로 출력하면 되는데 마지막 출력문에서

System.out.println(s2.trim().indexOf("v"));

trim().indexOf()가 연달아 나와서 순서를 바꿔서 하면 값이 달라지므로 중요하다~~ 

항상 출력은 앞에서 부터 하므로 trim부터해서 공백을 없애고 indexOf로 v의 위치를 찾으므로 답은 222222

 

 

1-4) String 클래스에서 제공하는 유용한 정적 메서드

 

정적 메서드 설명
String format() 주어진 포맷에서 맞춘 문자열을 반환
String join() 주어진 구분자와 연결한 문자열을 반환(자바 8부터)
String valueOf() 각종 기초 타입이나 객체를 문자열로 반환

public class String5Demo {

       public static void main(String[] args) {

              String version = String.format("%s %d", "JDK", 14);

              System.out.println(version);

 

              String fruits = String.join(",", "apple", "banana", "cherry", "durian");

              System.out.println(fruits);

 

              String pi = String.valueOf(3.14);

              System.out.println(pi);

      }

}

답은

JDK 14

apple,banana,cherry,durian

3.14

 


2) 배열 기초

 

2-1) 배열의 개념

 

  • 배열(array) : 타입이 동일한 여러 데이터의 연속된 기억 공간으로, 모든 데이터가 같은 배열 이름을 사용

2-2) 배열의 선언과 생성

 

  • 배열의 크기는 배열이 생성될 때 정해지며, length 필드에 저장한다
  • scores는 배열을 참조할 변수에 불과하므로 배열 객체를 생성해야한다
  • 배열 객체는 문자열처럼 new 연산자로 생성한다

 

2-3) 다차원 배열

 

  • 배열의 배열
  • ex) 학생 3명의 5과목 성적을 처리하는 정수 타입 2차원 배열(3행 * 5열)인 scorses를 선언하고 생성한다면..

2-4) 동적 배열

 

  • 처리할 데이터의 개수가 고정된 경우가 아니라면 정적 배열은 자원을 낭비하거나 프로그램을 다시 컴파일
  • 자바는 크기가 유동적인 배열을 지원하기 위하여 ArrayList 클래스를 제공
  • ArrayList 객체 생성
더보기

ArrayList<참조타입>참조변수 = new ArrayList<>();

참조 타입 : 기초 타입의 동적 배열이라면 Integer, Long, Short, Float, Double, Charater, Boolean 등을 사용한다

 

728x90
반응형
728x90
반응형

** 한글 단축기 꿀팁 정리해드립니다

  • 표 공간 보기 좋게 늘리고 줄이기 : [F5] + 원하는 만큼 [Shift] 원하는 만큼 선택하기 =>  [Ctrl] + [화살표] 
  • 글꼴, 문단 모양 복사 붙이기 : [Alt] + [c]
  • 자간 줄이기 : [Shift] + [Alt] + [R]
  • 자간 넓이기 : [Shift] + [Alt] + [E]
  • 표 크기 일정하게 적용하기 : [W] - 너비[H] - 높이

+ 한글은 아니지만 [Ctrl] + 마우스 스크롤하면 화면 크기가 확대되고 축소되고 합니당~~

 


1) 메서드

 

1-1) 메서드의 개념

 

  • 재사용할 수 있는 코드를 모아둔 집합
  • 독립적으로 존재하지 않고 클래스 내부에서만 정의된다
  • 코드를 모듈화해 가독성을 높이므로 프로그램 품질을 향상시킨다

 

1-2) 메서드의 구조

  • 메서드는 헤더와 본체로 구성된다
  • 헤더는 메서드의 접근 지정자, 반환 타입, 메서드 이름, 매개변수로 구성된다
  • 접근 지정자 : 메서드의 특성으로 컴파일러에 메서드의 접근 범위를 알려준다
  • 반환 타입 : 메서드가 본체를 실행한 후 반환할 데이터 타입이다. 반환할 데이터가 없다면 반환 타입에 void를 사용한다. 따라서 main() 메서드는 반환할 데이터가 없으므로 반환 타입으로 void를 사용한다
  • 지역 변수 : 메서드는 변수를 선언해 사용하는데, 매개변수나 메서드 본체에 선언된 변수를 지역 변수라고 한다.
  • 본체실행할 코드를 나열하는 부분으로 메서드 실행 블록이다

 

1-3) 메서드 오버로딩

 

  • 자바는 메서드 시그너처(메서드 이름, 매개변수의 개수, 매개변수의 데이터 타입, 매개변수의 순서를 의미)를 사용해 메서드를 구분한다
  • 메서드 이름이 동일하더라도 매개변수의 개수, 매개변수의 데이터 타입, 매개변수의 순서 중 하나라도 다르면 서로 다른 메서들 취급한다. 
  • 이름은 같지만 메서드 시그너처가 다른 메서드를 정의하는 것메서드 오버로딩이라고 한다.

public class OverloadDemo {

       public static void main(String[] args) {

              int i1 = 3, i2 = 7, i3 = 10;

              double d1 = 7.0, d2 = 3.0;

              System.out.printf("max(%d, %d) = %d\n", i1, i2, max(i1, i2));

              System.out.printf("max(%.1f, %.1f) = %.1f\n", d1, d2, max(d1, d2));

              System.out.printf("max(%d, %d,%d) = %d\n", i1, i2, i3, max(i1, i2, i3));

       }

       public static int max(int n1, int n2) {

              int result = n1 > n2 ? n1 : n2;

              return result;

       }

        public static double max(double n1, double n2) {

        double result = n1 > n2 ? n1 : n2;

        return result;

        }

        public static int max(int n1, int n2, int n3) {

         return max(max(n1, n2), n3);

        }

}

답은

max(3, 7) = 7

max(7.0, 3.0) = 7.0

max(3, 7,10) = 10

입니다~

 

2)  Github 사용하기

 

2-1) Github 아라보기

  • GitHub : 코드 저장소(코드 저장소의 클라우드 같은 느낌)
  • Git이랑 GitHub는 다르다 (Git은 코드 관리하여 Github에 코드를 저장)
  • 포토폴리오 작성에 좋다

 

2-2) 폴더 만들기

  • 가입을 한다 : 구글 아이디로 하면 좋음
  • 초록생 new 창을 들어간다
  • repository name 폴더명을 입력한다
  • 파일을 공유하려면 public 보안하려면 private를 선택한다
  • create repository를 선택하여 폴더를 만든다

 

2-3) 파일 추가하기

 

  • 깃 사용하지 않고 파일을 업로드한다면...
  • Add file에 Upload files에 들어간다음
  • 파일을 드래그하거나 파일을 선택합니다
  • Commit changes 밑에 설명을 추가합니다.

 

제 깃허브입니다~~~ 많은 관심 부탁드려용💕💕

 

https://github.com/chosuhyeon0812/Test.git

 

GitHub - chosuhyeon0812/Test

Contribute to chosuhyeon0812/Test development by creating an account on GitHub.

github.com

 

728x90
반응형
728x90
반응형

1) 제어문

  : 실행문의 수행 순서를 변경하는 것 (조건문, 반복문, 분기문으로 구분) 

 

  • 조건문 : 조건식의 결과에 따라 여러 실행 경로  중 하나를 선택한다. 선택문이라고도 한다. ex)  다양한 종류의 if 문,  switch 문
  • 반복문 : 조건에 따라 같은 처리를 반복한다 ex)  for 문, while 문, do~while 문
  • 분기문 : 실행 흐름을 무조건 변경하는 break 문과 continue 문이 있다.
  • 제어문 내분에 다른 제어문을 포함할 수 있어 제어문을 사용하면 흐름이 복잡한 프로그램도 개발할 수 있다.

 

2) 조건문 

 

2-1) 단순 if 문 

  • 조건식이 true일 때만 실행문을 수행한다
  • 조건식이 true일 때 실행문이 하나라면 { } 를 생략할 수 있다

2-2) if~else 문 

  • 조건식의 true나 false에 따라 다른 실행문을 수행할 때 사용한다

import java.util.Scanner;

public class java0402 {

       public static void main(String[] args) {

              Scanner in = new Scanner(System.in);

              System.out.print("숫자를 입력하세요:");

              int number = in.nextInt();

              if (number % 2 == 0)

                   System.out.println("짝수!");

              else

                    System.out.println("홀수!");

               System.out.println("종료");

         }

}

9~12행과 같이 단순한 if~else 문은 조건 연산자를 사용해 더 간결하게 표현할 수 있다

 

=> System.out.println(number % 2 == 0 ? "짝수!" : "홀수!");

 

2-3) 다중 if 문 

 

  • 조건이 다양할 때는 다중 if 문으로 표현하면 좋다
  • if 문 다음에 else if 문을 연속 추가해 각 조건을 차례대로 점검한 후 만족하는 실행문을 수행한다
  • 다중 if 문은 여러 조건 중 하나만 ture로써 해당 실행문을 수행하고, 나머지는 더 이상 비교하지 않는다.

2-4) 중첩 if 문

 

  • if 문에 다른 if 문이 포함되는 것
  • 중첩 if 문에는 if 절과 else 절에 관련된 실행문이 명확하게 표시되도록 중괄호를 사용하면 좋다.(사용 안해도 실행은 가능하지만 혼란스러울 수 있다)

왼쪽 if 문의 경우 들여쓰기를 잘못해서 마치 else절이 외부 if 문과 연결되어 있는 것처럼 보인다.

 

3) 반복문

 

3-1) while 문

 

  • 반복할 횟수는 미리 알 수 없지만 조건은 알 수 있을 때 주로 사용하는 반복문
  • 조건식이 true 일 동안 본체 실행문을 반복적으로 수행한다.
  • 조건식이 false이면 while 문 다음 실행문을 수행한다.

public class WhileDemo_2 {

         public static void main(String[] args) {

                int i = 1;

                while (i < 5) {

                System.out.print(i);

                  i++;

                }

          }

 }

i 값이 5보다 작을 동안 반복해 실행하므로

결과는

1234

 

3-2) do~while 문

 

  •  while 문과 비슷하지만 조건식 평가와 본체 실행 순서가 다르다
  • 반복문 본체를 먼저 실행한 후 조건식을 평가한다(최소한 한 번은 반복문 본체를 실행한다)
  • 세미코론으로 끝내야 하며, while 문과 마찬가지로 조건식이 없을 때는 컴파일 오류가 발생한다.
  • 근데 코드 볼때 잘 본적이 없는것 같음.. 거의 반복문하면 while이나 for을 사용했던 듯함..

public class DoWhile1Demo {

        public static void main(String[] args) {

               int i = 1;

               do {

                      System.out.print(i);

                       i++;

                } while(i<5);

         }

}

연속 숫자를 출력하는 예제는 while 문을 사용하든 do~while 문을 사용하든 간에 결과는 같다.

=> 실행 결과를 보면, do~while 문은 본테를 한 번 실행하지만, while 문은 본체를 한 번도 실행하지 않은 채로 종료한 것을  알 수 있다.

 

3-3) for 문

 

  • 반복할 횟수를 미리 알 수 있을 때 주로 사용하는 반복문
  • 조건식이 true이면 본체 실행문을 반복적으로 수행한다.
  • 다른 반복문에 비해 코드의 길이가 짧음!!(내가 느끼기에), 가장 효율적임

public class For1Demo {

       public static void main(String[] args) {

              for (int i = 1; i < 5; i++)

              System.out.print(i);

       }

}

  • for 문은 초기식, 조건식, 증감식도 생략할 수 있는데, 이때는 무한 반복문이 된다.

  • for 문에서 초기식이나 증감식이 2개 이상 필요하다면 다음과 같이 쉽표로 구분해서 작성한다.

 

4) 분기문   **분기문을 사용하면 프로그램 흐름이 복잡해지기 때문에 꼭 필요할 때를 제외하고는 3가하3

 

4-1) break 문

 

  • 반복문이나 switch 문의 본채를 벗어나려고 주로 사용된다
  • 레이블과 함께 사용할 수도 있다. 
  • 레이블이 없다면 break 문을 포함하는 맨 안쪽 반복문을 종료하고, 레이블이 있다면 레이블로 표시된 외부 반복문을 종료

public class BreakDemo {

        public static void main(String[] args) {

                int i = 1, j = 5;

                while (true) {

                      System.out.println(i++);

                       if (i >= j)

                           break;

               }

        }             

}

답은

1

2

3

4

4-2) continue 문

 

  • 반복문에서만 사용
  • continue문도 break 문처럼 레이블을 붙일 수 있다

public class ContinueDemo {

       public static void main(String[] args) {

              for (int i = 0; i < 10; i++) {

                    if (i % 2 == 0)

                        continue;

                    System.out.print(i);

             }

     }

}

답은

1

3

5

7

9

 

 

728x90
반응형
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
반응형

+ Recent posts