Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

새싹교실/2021/다Java먹자/김동영: Difference between revisions

From ZeroWiki
imported>ktasha45
No edit summary
(Repair batch-0006 pages from live compare)
 
(37 intermediate revisions by 5 users not shown)
Line 14: Line 14:
   
   
  public class Hello {
  public class Hello {
  public static void main(String[] args) {
  public static void main(String[] args) {
  int i=1, sum=0;
  int i=1, sum=0;
  while(i<=100) {
  while(i<=100) {
Line 30: Line 30:
   
   
  public class Hello {
  public class Hello {
  public static void main(String[] args) {
  public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  Scanner scanner = new Scanner(System.in);
  int n = scanner.nextInt();
  int n = scanner.nextInt();
Line 49: Line 49:


= 3주차 수업 회고 =
= 3주차 수업 회고 =
오늘도.. 더이상 변명의 여지가 없다. 절대 이런 일 없을 거라고 말씀드렸었는데.  
불참.
주말에 과제를 몰아서 하는 습관을 없애야겠다. ppt로 직접 공부하고 2주차 숙제, 3주차 숙제를 해봐야겠다.
주말에 과제를 몰아서 하는 습관을 없애야겠다. ppt로 직접 공부하고 2주차 숙제, 3주차 숙제를 해봐야겠다.


Line 57: Line 57:
   
   
  public class Hello {
  public class Hello {
  public static void main(String[] args) {
  public static void main(String[] args) {
  int[] array = {1, 5, 3, 8, 2};
  int[] array = {1, 5, 3, 8, 2};
  int max = 0;
  int max = 0;
  for(int i=0; i<5; i++) {
  for(int i=0; i<5; i++) {
  max = ((max < array[i]) ? array[i] : max);
  max = ((max < array[i]) ? array[i] : max);
  }
  }
  System.out.print(max);
  System.out.print(max);
Line 68: Line 68:
삼항연산자를 써서 풀어봤다.
삼항연산자를 써서 풀어봤다.


= 4주차 수업 회고 =
생성자를 오버로딩할 때 겹치는 코드를 줄이기 위해서 다른 생성자를 끌어다 사용한다는 점이 인상적이었다.
자바에서도 매개변수에 디폴트값을 넣는 게 가능한지 궁금했는데, 물론 그냥 필드를 선언할 때 값을 지정해주면 그만이다.
근데 자바나 C에선 new function()으로 함수를 생성할 때 매개변수의 입력 경우의 수에 따라 함수를 재정의해주어야 한다.
C에서는
void Function(char param1, int param2, double param3=9.8);
같은 형태로 매개변수에 디폴트값을 넣어 하나의 함수로도 매개변수가 2개, 3개일 때 동시에 사용할 수 있다.
이런 형태가 java 클래스의 생성자에서도 쓰일 수 있는지 시험해봐야겠다.
// student.java
package QW;
public class Student {
String department = "소프트웨어학부";
String gender = "female";
int studentId = 21;
Student(){
}
}
// test.java
package QW;
public class Test {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.department);
System.out.println(student.studentId);
System.out.println(student.gender);
}
}
#2
//test.java
package QW;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
String department, gender;
int studentId;
Scanner sc = new Scanner(System.in);
System.out.println("학부: ");
department = sc.next();
System.out.println("학번: ");
studentId = sc.nextInt();
System.out.println("성별: ");
gender = sc.next();
Student student = new Student(department, studentId, gender);
System.out.println(student.department);
System.out.println(student.studentId);
System.out.println(student.gender);
}
}
//student.java
package QW;
public class Student {
String department, gender;
int studentId;
Student(String department, int studentId, String gender){
this.department = department;
this.gender = gender;
this.studentId = studentId;
}
}
== 댓글 ==
* https://bluesid.tistory.com/251 도움이 될 만한 링크인 것 같아요 - [[김은솔]]
= 5주차 수업 회고 =
저번 시간에 생성자에 대해 배웠다면 이번엔 필드, 변수, 매소드에 대해 배웠다.
형태만 다르지 c++이나 파이썬과 코드의 흐름은 비슷해서 배우기 어렵지 않았다.
다만 ststic final 으로 상수를 선언하는 게 신기했다. c에서도 const 등으로 상수를 선언하긴 하지만, 그것보단 #define으로 선언하는 게 더 익숙해져서인지 새삼스러웠다. #define은 변수를 생성한다기보단 그냥 PI라는 이름이 나오면 3.14로 치환해주는 함수같은 형태라면 const와 final은 변수의 형태이지만 여러 제약을 통해 상수로서 역할하는 것이다. 이 둘 사이에도 차이가 있다고 하는데 c++ 이론도 완벽하진 않아서 둘의 차이를 공부하긴 힘들 것 같다. 그래도 새싹톤 참가 전엔 약간이라도 알아보는 게 도움이 될 듯하다.
<필수>
- 사칙연산이 가능해야 한다.
- 3.14의 값을 갖는 pi를 정적 변수로 선언한다.
- 나눗셈의 매개 변수는 int, double 두 개로 선언한다.
- 계산기 변수가 몇 번 만들어졌는지 확인할 수 있는 정적 필드 calculatorSetCount를 만들어야 한다. (계산기가 생성될 때마다 setCount의 숫자를 증가시킨다.)
<Calculator class>
- 사칙연산 메소드
- 정적 필드 pi
- circleArea 메소드 :
원의 넓이를 구하는 메소드. pi를 사용해야 한다. 반지름을 하나 입력받는다. 매개 변수의 타입은 int로 한다.
<TestMain class>
- 계산기 변수를 선언하고 덧셈, 나눗셈을 수행한 후 값을 출력한다.
- 새로운 계산기 변수를 선언하고 원의 넓이를 계산하고 출력한다.
- calculatorSetCount를 출력한다.
//Calculator.java
package practice;
public class Calculator {
static final double PI = 3.14;
static int calculatorSetCount = 0;
Calculator(){
calculatorSetCount++;
}
int addition(int x, int y) {
int result = x+y;
return result;
}
int subtraction(int  x, int y) {
int result = x-y;
return result;
}
int multiplication(int x, int y) {
int result = x*y;
return result;
}
int division(int x, int y) {
int result = x/y;
return result;
}
double division(double x, double y) {
double result = x/y;
return result;
}
double circleArea(int x) {
double result = PI*x*x;
return result;
}
}
//TestMain.java
package practice;
import java.util.Scanner;
public class TestMain {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Calculator cal_1 = new Calculator();
int additionInt = cal_1.addition(10, 20);
System.out.println(additionInt);
int divisionInt = cal_1.division(30, 20);
System.out.println(divisionInt);
double divisionDouble = cal_1.division(5.0, 2.3);
System.out.println(divisionDouble);
Calculator cal_2 = new Calculator();
System.out.println("반지름을 입력하세요: ");
int radius = sc.nextInt();
double circleArea = cal_2.circleArea(radius);
System.out.println(circleArea);
System.out.println(Calculator.calculatorSetCount);
}
}
이렇게 써놓고 보니 TestMain.java에서
Calculator.calculatorSetCount+=1;
으로  calculatorSetCount에 접근이 가능한 것 같아서 별로이다. 이런 코드보단,  private static int calculatorSetCount = 0;으로  calculatorSetCount에 접근이 불가능하도록 해놓고, {{{static int getCalculatorSetCount() {
return calculatorSetCount;
}
}}} 같은 형식으로 getter 함수를 만들어주는 게 더 명확한 것 같다. 그리고 다음부턴 매소드나 필드 모두에 private이든 public이든 써주어야 헷갈리지 않을 것 같다. 그러기 위해선 접근 지정자에 대해 더 공부해야할 것 같은데, 이것도 시험 끝나면 한번 정리해봐야겠다.
= 6주차 수업 회고 =
'상속' 하나만 배웠는데도, 다른 시간보다 배운 게 더 많은 것 같다.
* 실습
<Fruit class>
- String name, String color, String flavor
- 생성자는 같은 패키지와 자식에서만 쓸 수 있도록 선언
- 생성자의 입력은 name, color, flavor 3개가 동시에 들어온다.
- name, color, flavor를 출력하는 메소드 print를 선언
- 메소드는 public으로 선언
<Apple class>
- color는 red로 고정
- print를 오버라이딩해서 color가 red인 경우 This is Apple을 출력하도록 할 것. 그 이외에는 Fruit의 print를 호출할 것
<Test class>
- Fruit을 선언하고, 임의의 값 (name, color, flavor 3개를 넣을 것, 단 color는 red가 아닌 다른 값을 넣는다) 을 넣어 초기화한다.
- Apple을 선언하고, 임의의 값 (color 제외하고 2개를 넣을 것)을 넣어 초기화한다.
- 각각 Fruit 과 Apple의 print를 호출한다.
수업 당시 실습 전에 강의실을 나와버려서 코드 확인은 받지 못했다.
private String color = "red";
public Apple(String name, String flavor){
super(name, this.color, flavor);
}
처음 Fruit 클래스의 코드를 이렇게 썼을 때
: "Cannot refer to 'this' nor 'super' while explicitly invoking a constructor"
라는 오류메세지가 떴다. 생성자를 호출할 때는 this와 super를 통한 참조가 불가능하다고 하는 것 같은데, 또 생성자 호출은 생성자에서 첫 번째 줄의 코드에 나와야 해서
private String color = "red";
public Apple(String name, String flavor){
String color = this.color;
super(name, color, flavor);
}
같은 형태도 불가능하다.
그래서
public Apple(String name, String flavor){
super(name, "red", flavor);
}
로 일단 짜긴 했는데 더 좋은 방법이 있을지 궁금하다. 이건 좀 난잡한 코드인 것 같다.
= Q =
제 이름으로 된 새로운 페이지를 만들고 싶어서 [https://wiki.zeropage.org/wiki.php/%EC%83%88%ED%8E%98%EC%9D%B4%EC%A7%80%EB%A7%8C%EB%93%A4%EA%B8%B0 https://wiki.zeropage.org/wiki.php/새페이지만들기]
을 참고해서 Go에 제 이름을 쳤는데, 자꾸 이 링크로 접속이 되네요. 이건 어떻게 해결해야 할까요? 이 페이지를 삭제하고 제 페이지를 만들고 다시 이 페이지를 복구해야 할까요?
그리고 정모 링크가 올라오는 사이트가 혹시 따로 있나요?
감사합니다.
* 이유는 모니위키가 '/' 기준으로 하위 페이지를 구분 해서 이 페이지의 이름도 '김동영'으로 인식해서 그런 것 같은데여. [https://wiki.zeropage.org/wiki.php/김동영?action=edit] << 다른 페이지 만들기로 들어가서 페이지 이름 값만 바꿔 넣은건데 이거 주소창에 쳐서 해볼래요? 정모 사이트는 카톡같은데 있을 것 같은데 잘 모름... 회장단한테 말씀드림 - &#91;kjm&#93;
* └ 감사합니다..!! [[김동영]]

Latest revision as of 01:08, 27 March 2026

1주차 수업 회고

JS와 JAVA 사이에 접점이 있을 것이라 생각하고 JAVA를 배우겠다고 투표했다. 오늘 둘 사이에 별로 큰 접점이 없다는 것을 알았지만 상관없다. 어차피 JAVA도 처음 해보는 것이니 분명 새로운 것을 많이 배울 수 있을 것이다.

2주차 수업 회고

불참했다.

assignment 1

1부터 100까지의 정수 중에서 짝수들의 합을 계산하여 결과값을 출력하는 프로그램을 구현한다. 조건 : while문을 사용하고, if 문은 사용하지 않도록 한다.

public class Hello {
	public static void main(String[] args) {
		int i=1, sum=0;
		while(i<=100) {
			sum += i;
			i++;
		}
		System.out.print(sum);
	}	
}

assignment 2

주어진 10진수를 2진수로 변환하는 프로그램을 구현한다.

import java.util.Scanner;

public class Hello {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);		
		int n = scanner.nextInt();
		
		long digit=1, sum=0;
		while(n!=0) {
			sum += n%2 * digit;
			n /= 2;
			digit *= 10;
		}
		System.out.print(sum+"(2)");
		scanner.close();
	}
}

문법 자체는 c++과 많이 다르지 않은 것 같다. 2번에서 12345같은 꽤 큰 수를 입력하면 이상한 값이 출력되는 것을 방지하기 위해 long 형을 사용했다. 하지만 그래도 표현상 한계가 있다. 배열을 사용하는 풀이가 가장 편한 것 같다. 자바에도 스택이 있는 지 모르겠다. 2번 풀이를 추가해야 함.

3주차 수업 회고

불참. 주말에 과제를 몰아서 하는 습관을 없애야겠다. ppt로 직접 공부하고 2주차 숙제, 3주차 숙제를 해봐야겠다.

assignment 1

주어진 배열의 항목에서 최댓값 구하기 int[] array = {1, 5, 3, 8, 2}

public class Hello {
	public static void main(String[] args) {
		int[] array = {1, 5, 3, 8, 2};
		int max = 0;
		for(int i=0; i<5; i++) {
			 max = ((max < array[i]) ? array[i] : max);
		}
		System.out.print(max);
	}
}

삼항연산자를 써서 풀어봤다.

4주차 수업 회고

생성자를 오버로딩할 때 겹치는 코드를 줄이기 위해서 다른 생성자를 끌어다 사용한다는 점이 인상적이었다.

자바에서도 매개변수에 디폴트값을 넣는 게 가능한지 궁금했는데, 물론 그냥 필드를 선언할 때 값을 지정해주면 그만이다. 근데 자바나 C에선 new function()으로 함수를 생성할 때 매개변수의 입력 경우의 수에 따라 함수를 재정의해주어야 한다. C에서는

void Function(char param1, int param2, double param3=9.8);

같은 형태로 매개변수에 디폴트값을 넣어 하나의 함수로도 매개변수가 2개, 3개일 때 동시에 사용할 수 있다. 이런 형태가 java 클래스의 생성자에서도 쓰일 수 있는지 시험해봐야겠다.


// student.java
package QW;
public class Student {
	String department = "소프트웨어학부";
	String gender = "female";
	int studentId = 21;
	
	Student(){
	}
}

// test.java
package QW;

public class Test {
	public static void main(String[] args) {
		Student student = new Student();
		System.out.println(student.department);
		System.out.println(student.studentId);
		System.out.println(student.gender);
	}
}


#2

//test.java
package QW;
import java.util.Scanner;

public class Test {
	public static void main(String[] args) {
		String department, gender;
		int studentId;
		
		Scanner sc = new Scanner(System.in);
		System.out.println("학부: ");
		department = sc.next();
		System.out.println("학번: ");
		studentId = sc.nextInt();
		System.out.println("성별: ");
		gender = sc.next();
		
		Student student = new Student(department, studentId, gender);
		System.out.println(student.department);
		System.out.println(student.studentId);
		System.out.println(student.gender);
	}
}

//student.java
package QW;
public class Student {
	String department, gender;
	int studentId;
	
	Student(String department, int studentId, String gender){
		this.department = department;
		this.gender = gender;
		this.studentId = studentId;
	}
}

댓글

5주차 수업 회고

저번 시간에 생성자에 대해 배웠다면 이번엔 필드, 변수, 매소드에 대해 배웠다. 형태만 다르지 c++이나 파이썬과 코드의 흐름은 비슷해서 배우기 어렵지 않았다. 다만 ststic final 으로 상수를 선언하는 게 신기했다. c에서도 const 등으로 상수를 선언하긴 하지만, 그것보단 #define으로 선언하는 게 더 익숙해져서인지 새삼스러웠다. #define은 변수를 생성한다기보단 그냥 PI라는 이름이 나오면 3.14로 치환해주는 함수같은 형태라면 const와 final은 변수의 형태이지만 여러 제약을 통해 상수로서 역할하는 것이다. 이 둘 사이에도 차이가 있다고 하는데 c++ 이론도 완벽하진 않아서 둘의 차이를 공부하긴 힘들 것 같다. 그래도 새싹톤 참가 전엔 약간이라도 알아보는 게 도움이 될 듯하다.


<필수>
- 사칙연산이 가능해야 한다.
- 3.14의 값을 갖는 pi를 정적 변수로 선언한다.
- 나눗셈의 매개 변수는 int, double 두 개로 선언한다.
- 계산기 변수가 몇 번 만들어졌는지 확인할 수 있는 정적 필드 calculatorSetCount를 만들어야 한다. (계산기가 생성될 때마다 setCount의 숫자를 증가시킨다.)

<Calculator class>
- 사칙연산 메소드
- 정적 필드 pi
- circleArea 메소드 : 
원의 넓이를 구하는 메소드. pi를 사용해야 한다. 반지름을 하나 입력받는다. 매개 변수의 타입은 int로 한다.

<TestMain class>
- 계산기 변수를 선언하고 덧셈, 나눗셈을 수행한 후 값을 출력한다.
- 새로운 계산기 변수를 선언하고 원의 넓이를 계산하고 출력한다.
- calculatorSetCount를 출력한다.
//Calculator.java
package practice;

public class Calculator {
	static final double PI = 3.14;
	static int calculatorSetCount = 0;
	
	Calculator(){
		calculatorSetCount++;
	}
	
	int addition(int x, int y) {
		int result = x+y;
		return result;
	}
	int subtraction(int  x, int y) {
		int result = x-y;
		return result;
	}
	int multiplication(int x, int y) {
		int result = x*y;
		return result;
	}
	int division(int x, int y) {
		int result = x/y;
		return result;
	}
	double division(double x, double y) {
		double result = x/y;
		return result;
	}
	double circleArea(int x) {
		double result = PI*x*x;
		return result;
	}
}


//TestMain.java
package practice;

import java.util.Scanner;

public class TestMain {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		Calculator cal_1 = new Calculator();
		int additionInt = cal_1.addition(10, 20);
		System.out.println(additionInt);
		int divisionInt = cal_1.division(30, 20);
		System.out.println(divisionInt);
		double divisionDouble = cal_1.division(5.0, 2.3);
		System.out.println(divisionDouble);

		Calculator cal_2 = new Calculator();
		System.out.println("반지름을 입력하세요: ");
		int radius = sc.nextInt();
		
		double circleArea = cal_2.circleArea(radius);
		System.out.println(circleArea);
		
		System.out.println(Calculator.calculatorSetCount);
	}
}

이렇게 써놓고 보니 TestMain.java에서

Calculator.calculatorSetCount+=1;

으로 calculatorSetCount에 접근이 가능한 것 같아서 별로이다. 이런 코드보단, private static int calculatorSetCount = 0;으로 calculatorSetCount에 접근이 불가능하도록 해놓고, {{{static int getCalculatorSetCount() { return calculatorSetCount; } }}} 같은 형식으로 getter 함수를 만들어주는 게 더 명확한 것 같다. 그리고 다음부턴 매소드나 필드 모두에 private이든 public이든 써주어야 헷갈리지 않을 것 같다. 그러기 위해선 접근 지정자에 대해 더 공부해야할 것 같은데, 이것도 시험 끝나면 한번 정리해봐야겠다.

6주차 수업 회고

'상속' 하나만 배웠는데도, 다른 시간보다 배운 게 더 많은 것 같다.

  • 실습
<Fruit class>
- String name, String color, String flavor
- 생성자는 같은 패키지와 자식에서만 쓸 수 있도록 선언
- 생성자의 입력은 name, color, flavor 3개가 동시에 들어온다.
- name, color, flavor를 출력하는 메소드 print를 선언
- 메소드는 public으로 선언

<Apple class>
- color는 red로 고정
- print를 오버라이딩해서 color가 red인 경우 This is Apple을 출력하도록 할 것. 그 이외에는 Fruit의 print를 호출할 것

<Test class>
- Fruit을 선언하고, 임의의 값 (name, color, flavor 3개를 넣을 것, 단 color는 red가 아닌 다른 값을 넣는다) 을 넣어 초기화한다.
- Apple을 선언하고, 임의의 값 (color 제외하고 2개를 넣을 것)을 넣어 초기화한다.
- 각각 Fruit 과 Apple의 print를 호출한다.

수업 당시 실습 전에 강의실을 나와버려서 코드 확인은 받지 못했다.

	private String color = "red";
	public Apple(String name, String flavor){
		super(name, this.color, flavor);
	}

처음 Fruit 클래스의 코드를 이렇게 썼을 때

"Cannot refer to 'this' nor 'super' while explicitly invoking a constructor"

라는 오류메세지가 떴다. 생성자를 호출할 때는 this와 super를 통한 참조가 불가능하다고 하는 것 같은데, 또 생성자 호출은 생성자에서 첫 번째 줄의 코드에 나와야 해서

	private String color = "red";
	public Apple(String name, String flavor){
		String color = this.color;
		super(name, color, flavor);
	}

같은 형태도 불가능하다. 그래서

	public Apple(String name, String flavor){
		super(name, "red", flavor);
	}

로 일단 짜긴 했는데 더 좋은 방법이 있을지 궁금하다. 이건 좀 난잡한 코드인 것 같다.

Q

제 이름으로 된 새로운 페이지를 만들고 싶어서 https://wiki.zeropage.org/wiki.php/새페이지만들기

을 참고해서 Go에 제 이름을 쳤는데, 자꾸 이 링크로 접속이 되네요. 이건 어떻게 해결해야 할까요? 이 페이지를 삭제하고 제 페이지를 만들고 다시 이 페이지를 복구해야 할까요?

그리고 정모 링크가 올라오는 사이트가 혹시 따로 있나요?

감사합니다.

  • 이유는 모니위키가 '/' 기준으로 하위 페이지를 구분 해서 이 페이지의 이름도 '김동영'으로 인식해서 그런 것 같은데여. [1] << 다른 페이지 만들기로 들어가서 페이지 이름 값만 바꿔 넣은건데 이거 주소창에 쳐서 해볼래요? 정모 사이트는 카톡같은데 있을 것 같은데 잘 모름... 회장단한테 말씀드림 - [kjm]