
java - overriding
2020. 3. 9. 22:34
📌 java/java
창의적인 상속 상속은 상위 클래스의 기능을 하위 클래스에게 물려주는 기능이다. 그렇다면 하위 클래스는 상위 클래스의 메소드를 주어진 그대로 사용해야 할까? 만약 그래야 한다면 제약이 상당할 것이다. 어떤 메쏘드에 대해서는 자식클래스 만의 독자적인 메쏘드를 정의해야할 필요가 있다. 부모가 가지고 있는 메쏘드를 물려받긴 했지만 자식 클래스의 필요에 따라서 부모 클래스의 메쏘드를 변경하는 방법이 overriding이다. 이런 제약을 벗어나려면 하위 클래스가 부모 클래스의 기본적인 동작방법을 변경할 수 있어야 한다. 이런 맥락에서 도입된 기능이 메소드 오버라이딩(overriding)이다. 상속 시간의 예제를 살펴보자. 이 예제는 클래스 Calculator의 기본적인 동작 방법을 상속 받은 Substraction..

java - 상속과 생성자
2020. 3. 3. 11:13
📌 java/java
상속과 생성자 편리함을 위해서 어떠한 기능을 수용하면 그 기능이 기존의 체계와 관계하면서 다양한 문제를 발생시킨다. 그 문제를 한마디로 줄여서 말하면 복잡도의 증가라고 할 수 있다. 이번 시간에는 생성자가 상속을 만나면서 발생한 복잡성을 보여줄 생각이다. 그 맥락에서 super이라는 키워드의 의미도 중요하게 다뤄질 내용이다. 이번 수업을 이해하기 위해서는 기본 생성자의 성질에 대한 이해가 선행되야 한다. 아래의 예제를 보자. package org.opentutorials.javatutorials.Inheritance.example4; public class ConstructorDemo { public static void main(String[] args) { ConstructorDemo c = new ..

java - 상속
2020. 3. 2. 16:44
📌 java/java
상속이란? 객체지향을 통해서 달성하고자 하는 목표 중에서 가장 중요한 것은 재활용성일 것이다. 상속은 객체지향의 재활용성을 극대화시킨 프로그래밍 기법이라고 할 수 있다. 동시에 객체지향을 복잡하게 하는 주요 원인이라고도 할 수 있다. 상속(Inheritance)이란 물려준다는 의미다. 어떤 객체가 있을 때 그 객체의 필드(변수)와 메소드를 다른 객체가 물려 받을 수 있는 기능을 상속이라고 한다. 부모와 자식의 관계에 따른 비유를 들을 수도 있지만, 비유는 얻는 것보다 잃는 것이 많기 때문에 구체적인 코드를 통해서 상속을 알아보자. A extends B : A는 B를 확장한다 자식객체 extends 부모객체 subclass extends superclass derived class extends base ..

java - 생성자(constructor)
2020. 2. 28. 17:54
📌 java/java
회사에 출근해서 업무를 시작하기 전에 제일 먼저 하는 일이 아마 책상 정리일 것이다. 커피를 내리는 경우도 있을 것이고, 컴퓨터 부팅을 시작하기도 할 것이다. 즉 어떤 일을 시작하기 전에 준비를 하게 되는데 이것을 다른 말로 초기화라고 한다. 객체 지향 프로그래밍도 초기화에 해당하는 기능이 제공되는데 이것을 생성자(constructor)라고 한다. 앞에서 살펴봤던 계산기 예제를 보자. 객체를 이용하기 위한 로직은 아래와 같다. 위의 예에서 메소드 setOprands의 값으로 10과 20을 지정했다. 이 값들은 객체 내부에서 인스턴스 변수 left와 right의 값으로 설정되어서 유지된다. 그런데 이 객체를 이용하기 위해서는 기억해야 할 것이 있다. 아래와 같이 메소드 setOprands를 호출하기 전에 ..

java - 유효 범위
2020. 2. 26. 17:59
📌 java/java
변수와 메소드 같은 것들을 사용할 수 있는 것은 이름이 있기 때문이다. 아래 코드에서 left는 변수의 이름이고, sum은 메소드의 이름이다. 프로그램이 커지면 여러 가지 이유로 이름이 충돌하게 된다. 이를 해결하기 위해서 고안된 것이 유효범위라는 개념이다. 흔히 스코프(Scope)라고도 부른다. 메소드, 클래스와 같은 개념들이 등장한 배경은 프로그램을 만드는 데 사용하는 코드의 양이 기하급수적으로 증가하면서 직면하게 되는 막장을 극복하기 위한 것이었다. 거대해진 코드를 효율적으로 제어하지 못한다면 웅장한 소프트웨어를 만드는 것은 점점 불가능한 일이 될 것이다. 유효범위라는 것도 그러한 맥락에서 등장한 개념이다. 하지만 유효범위는 메소드나 클래스처럼 특별한 문법적인 규칙을 가지고 있는 것은 아니다. 오히..

java - 클래스 멤버와 인스턴스 멤버
2020. 2. 25. 18:41
📌 java/java
맴버(member)는 영어로 구성원이라는 뜻이다. 객체도 구성원이 있는데 아래와 같다. 변수 메쏘드 객체를 만들기 위해서 우선 클래스를 정의하고, 클래스에 대한 인스턴스를 만들었다. 복습을 해보자. 이전 시간에 살펴봤던 예제 CalculatorDemo.java에서 left와 right 변수는 누구의 멤버일까? 인스턴스의 멤버다. 인스턴스를 만들어야 사용할 수 있었고, 인스턴스마다 서로 다른 값을 가지고 있기 때문이다. 그렇다면 클래스도 맴버를 가질 수 있다는 것일까? 아래 그림과 같이 클래스도 맴버를 가질 수 있다. 그 방법을 알아보는 것이 이번 수업의 목표다. 인스턴스 소유의 변수가 아니고 클래스 소유의 변수가 존재한다. 클래스 소유의 변수와 인스턴스 소유의 변수는 다른 특성을 가지고 있다. Calcu..

java - 클래스와 인스턴스 (2020/02/20)
2020. 2. 20. 15:52
📌 java/java
메쏘드를 이용하면 메쏘드를 안 썼을 때 보다 유지보수의 편의성이 높아진다. 연관되어있는 코드를 묶어놨기 때문에 이코드를 보는 사람들의 가독성이 향상된다. 어떻게 하면 이 데이터라는 변수로 상징되는 데이터와 연산으로 상징되는 메쏘드를 서로 연관되어 있는 것들끼리 그룹핑 할것인가? -> 해서 만들어진 것이 객체지향 프로그래밍이다. 코드가 복잡해짐에 따라서 버그는 많아지고, 팀웍은 서서히 깨지기 시작할 것이다. 여러분이 언어의 설계자라면 이런 상황을 완화하기 위한 고민을 시작할 것이다. 이런 맥락에서 객체 지향이라는 개념이 등장하기 시작하는 것이다. 객체 지향은 많은 선배 프로그래머들에 의해서 만들어졌기 때문에 다양한 의도가 반영된 프로그래밍 패러다임이다. 그래서 객체 지향이 만들어진 동기를 하나의 케이스로 ..

java - 객체지향프로그래밍
2020. 2. 19. 22:51
📌 java/java
객체지향 프로그래밍(Object-Oriented Programming)은 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)로 이루어진 객체로 만드는 것이다. 이 객체들을 마치 레고 블럭처럼 조립해서 하나의 프로그램을 만드는 것이 객체지향 프로그래밍이라고 할 수 있다. 다시 말해서 객체지향 프로그래밍은 객체를 만드는 것이다. 따라서 객체지향 프로그래밍의 시작은 객체란 무엇인가를 이해하는 것이라고 할 수 있다. 말이 어렵게 느껴지지 않는가? 그것은 아직 객체 지향에 대한 체험이 없기 때문이다. 본 수업에서는 객체 지향에 대해서 코드 없이 이야기 할 수 있는 것들에 대해서만 이야기 할 생각이다. 객체 지향에 대한 오리엔테이션이라고 생각하고 가벼운 마음으로..

java - 앱이 실행중에 입력 받기 (2020/02/14)
2020. 2. 14. 22:11
📌 java/java
이번에는 자바앱이 실행되고 있는 동안에 사용자의 입력을 받는 법을 알아보자. 자바에서 기본적으로 제공하는 라이브러리 중에 scanner을 이용하면 쉽게 사용자의 입력을 잡을 수 있다. 안타깝게도 우리는 아직 라이브러리나 패키지와 같은 개념을 배우지 않았다. 아직은 이 로직을 샅샅이 이해하는 것은 무리이기 때문에 입력을 받는 방법에 대한 전체적인 흐름을 파악하는데 집중하자. package org.opentutorials.javatutorials.io; import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int i = sc.ne..
java - 입출력 (2020/02/14)
2020. 2. 14. 21:28
📌 java/java
public static void main(String[] args) String : 문자열 [] : []이 열리고 바로 닫혔다? 이것은 문자열을 담을 수 있는 배열이다 라는 뜻이다. args : args라는 이름을 가지고 있는 변수를 정의할 것인데 그 변수는 문자열의 데이터 타입을 담을 수 있는 배열이다. main이라는 함수의 parameter이다. void : 출력값이 존재하지 않는다 package org.opentutorials.javatutorials.io; class InputDemo{ public static void main(String[] args){ System.out.println(args.length); } } java InputDemo one two three; cmd에 이렇게 치면..

java - 입출력
2020. 2. 10. 21:36
📌 java/java
매개변수와 인자 메소드의 입력 값은 매개변수(parameter)를 통해서 이루어진다. 위의 예제를 조금 개선해보자. 이전 예제는 0부터 9까지의 숫자를 화면에 출력했다. 만약 필요에 따라서 0부터 4까지 출력하고 싶거나 0부터 8까지 출력하고 싶다면 어떻게 해야 할까? 각각에 맞는 메소드를 새로 정의해야 할까? 그렇게 해도 되지만 더 좋은 방법이 있다. 입력 값에 따라서 다른 출력 값을 갖도록 메소드를 정의하면 된다. 즉, 입력을 고민할 때가 된 것이다. 아래의 예제를 보자 package org.opentutorials.javatutorials.method; public class MethodDemo4 { public static void numbering(int limit) { int i = 0; wh..

java - 배열 (2020/02/08)
2020. 2. 8. 16:04
📌 java/java
배열(Array)은 연관된 정보를 그룹핑 하는데 사용한다. classGroup은 배열은 문자열의 데이터 타입의 형식을 가진 데이터들을 저장한다. String[] 변수를 정의하는 것 package org.opentutorials.javatutorials.array; public class GetDemo { public static void main(String[] args) { String[] classGroup = { "최진혁", "최유빈", "한이람", "이고잉" }; System.out.println(classGroup[0]); System.out.println(classGroup[1]); System.out.println(classGroup[2]); System.out.println(classGro..
java - while문, for문 (2020/02/07)
2020. 2. 7. 22:43
📌 java/java
while 문 package org.opentutorials.javatutorials.loop; public class WhileDemo { public static void main(String[] args) { int i = 0; // i의 값이 10보다 작다면 true, 크다면 false가 된다. 현재 i의 값은 0이기 때문에 이 반복문은 실행된다. while(i
java - 논리연산자 (2020/02/07)
2020. 2. 7. 21:13
📌 java/java
논리 연산자 조건문 수업에서 Boolean에 따라서 프로그램이 다르게 동작하도록 하는 방법을 배웠다. 이번 시간에는 Boolean의 값을 결합해서 코드를 좀 더 간결하게 만들 수 있는 논리 연산자(Conditional Operator)에 대해서 알아보자. 뒤에서는 조건문 수업의 예제에 논리 연산자를 결합해 볼 것이다. && &&는 좌항과 우항의 값이 모두 참(true)일 때 참이 된다. And라고 읽는다. 다음 예제를 보자. package org.opentutorials.javatutorials.conditionaloperator; public class AndDemo { public static void main(String[] args) { if (true && true) { System.out.pr..
java - switch문 (2020/02/07)
2020. 2. 7. 18:08
📌 java/java
switch문 package org.opentutorials.javatutorials.condition; public class SwitchDemo { public static void main(String[] args) { System.out.println("switch(1)"); switch(1){ case 1: System.out.println("one"); case 2: System.out.println("two"); case 3: System.out.println("three"); } System.out.println("switch(2)"); switch(2){ case 1: System.out.println("one"); case 2: System.out.println("two"); case ..

java - if문 (2029/02/05)
2020. 2. 5. 22:25
📌 java/java
지금까지 배운 부품들을 결합해서 작은 프로그램을 만들어보자. 예제에서 사용할 부품은 변수, 비교연산자, 조건문이다. 사용자가 입력한 아이디 값을 체크하는 프로그램을 만들어 볼 것이다. ID의 값으로 egoing을 입력해보고, 다른 값도 입력해보자. package org.opentutorials.javatutorials.condition; public class LoginDemo { public static void main(String[] args) { String id = args[0]; if(id.equals("egoing")){ System.out.println("right"); } else { System.out.println("wrong"); } } } 위의 프로그램을 실행하기 위해서는 조금 새..