-
내가 보려고 정리하는 java 개념 코드 정리기타 2021. 4. 2. 22:02반응형
객체 지향 언어에 대해 제대로 공부한 적이 없어
하루동안 java 언어의 개념을 한번 훑어보았습니다.
이 전에 사용한 dart 언어와 비슷한 점이 많아 개념을 이해하기 어렵지 않았습니다.
저는 생활코딩을 보고 공부했습니다
1) 자료형 표현
문자 (Character) - 작은 따옴표
문자열 (String) - 큰따옴표
System.out.println(1+2);
System.out.println("생활코딩");
System.out.println("egoing said \"Welcome programming world\"");
2) 변수 - byte 수 중요
정수형 : byte (1byte) short (2byte) int (4byte) long (8byte)
실수형 : float (4byte) double (8byte)
문자형 : char (2byte) String (12byte)
3) 배열
String[] classGroup = { "최진혁", "최유빈", "한이람", "이고잉" }; System.out.println(classGroup[0]);
4) for 문
for (int i = 0; i < 10; i++) { System.out.println("Coding Everybody " + i); }
5) 배열 for each
package org.opentutorials.javatutorials.array; public class ForeachDemo { public static void main(String[] args) { String[] members = { "최진혁", "최유빈", "한이람" }; for (String e : members) { System.out.println(e + "이 상담을 받았습니다"); } } }
6) method
public static String numbering(int init, int limit) { ... } public static void main(String[] args) { String result = numbering(1, 5); System.out.println(result); }
객체지향
7) 클래스 - 설계도
- 클래스 내 메소드는 행동(behave) 변수는 상태(state)를 나타낸다.
class Calculator{ int left, right; public void setOprands(int left, int right){ this.left = left; this.right = right; } public void sum(){ System.out.println(this.left+this.right); } public void avg(){ System.out.println((this.left+this.right)/2); } }
- static을 멤버(변수,메소드) 앞에 붙이면 클래스의 멤버가 된다
다른 기능은 필요없고 PI만 필요할 때 사용 , 인스턴트를 생성하지 않고도 클래스를 통해 접근 가능하다
static double PI = 3.14;
Calculator3.sum(10, 20);
System.out.println(Calculator.PI);
public static void sum(int left, int right){ System.out.println(left+right); }
8) 인스턴스 - 제품
Calculator c1 = new Calculator(); Calculator c2 = new Calculator();
- 인스턴스 메소드는 클레스 메소드에 접근할 수 있지만 클래스 메소드는 인스턴스 메소드에 접근할 수 없다.
static int static_variable = 1; //클래스 변수 int instance_variable = 2; // 인스턴스 변수 static void static_static(){ System.out.println(static_variable); } static void static_instance(){ // 클래스 메소드에서는 인스턴스 변수에 접근 할 수 없다. //System.out.println(instance_variable); } void instance_static(){ // 인스턴스 메소드에서는 클래스 변수에 접근 할 수 있다. System.out.println(static_variable); }
9) 생성자
인스턴스가 생성될 때 변수값을 강제로 입력하도록 함
Calculator c1 = new Calculator(10, 20); c1.sum(); c1.avg();
package org.opentutorials.javatutorials.constructor; class Calculator { int left, right; public Calculator(int left, int right) { this.left = left; this.right = right; } public void sum() { System.out.println(this.left + this.right); } public void avg() { System.out.println((this.left + this.right) / 2); } }
- 매개변수가 있는 생성자가 있을 때는 자동으로 기본 생성자를 만들어주지 않는다.
따라서 따로 기본 생성자를 추가해줘야한다.
에러발생
public class ConstructorDemo { public ConstructorDemo(int param1) {} public static void main(String[] args) { ConstructorDemo c = new ConstructorDemo(); } }
에러 해결
package org.opentutorials.javatutorials.Inheritance.example4; public class ConstructorDemo { public ConstructorDemo(){} public ConstructorDemo(int param1) {} public static void main(String[] args) { ConstructorDemo c = new ConstructorDemo(); } }
10) super
상위 클래스를 가리킴
class SubstractionableCalculator extends Calculator { public SubstractionableCalculator(int left, int right) { super(left, right); } public void substract() { System.out.println(this.left - this.right); } }
- overriding에서 상위 클래스와 코드 중복을 피하기 위해 super를 사용함
class Calculator { ... public int avg() { return ((this.left + this.right) / 2); } }
class SubstractionableCalculator extends Calculator { public void sum() { System.out.println("실행 결과는 " +(this.left + this.right)+"입니다."); } public int avg() { return super.avg(); } public void substract() { System.out.println(this.left - this.right); } }
오버라이딩과 오버로딩의 개념
http://seizemymoment.tistory.com/9911) 접근 제어자
▶ 클래스의 멤버(변수와 메소드)의 접근 제어자
package org.opentutorials.javatutorials.accessmodifier; class A { public String y(){ return "public void y()"; } private String z(){ return "public void z()"; } public String x(){ return z(); } } public class AccessDemo1 { public static void main(String[] args) { A a = new A(); System.out.println(a.y()); // 아래 코드는 오류가 발생한다. //System.out.println(a.z()); System.out.println(a.x()); } }
- private은 같은 클래스 내에 있는 x()에서는 접근가능하지만 클래스 밖 a는 접근 할 수 없다는 의미이다.
- private 이외에도 public , protected, default가 있다.
▶ 클래스의 접근 제어자
클래스의 접근 제어자는 public과 default가 있다.
접근 제어자가 public인 클래스는 다른 패키지의 클래스에서도 사용할 수 있고,
default인 경우는 같은 패키지에서만 사용 가능하다.
- public 예시 코드
package org.opentutorials.javatutorials.accessmodifier.inner; public class PublicClass {}
- default 예시코드
package org.opentutorials.javatutorials.accessmodifier.inner; class DefaultClass {}
- public 클래스가 포함된 소스코드는 public 클래스의 클래스 명과 소스코드의 파일명이 같아야 한다.
PublicNameDemo.java
package org.opentutorials.javatutorials.accessmodifier.inner; //public class PublicName {} public class PublicNameDemo {}
12) abstract
abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 한다.
▶추상 메소드
abstract class 내에는 abstract가 아닌 메소드도 정의될 수 있다.
하지만 abstract method는 본체가 아닌 시그니처만 정의해야하며 본체는 하위 위젯에서 정의한다.
package org.opentutorials.javatutorials.abstractclass.example2; abstract class A{ public abstract int b(); public void d(){ System.out.println("world"); } } class B extends A{ public int b(){return 1;} } public class AbstractDemo { public static void main(String[] args) { B obj = new B(); System.out.println(obj.b()); } }
▶추상 클래스
부모 클래스에는 메소드의 시그니처만 정의해놓고
그 메소드의 실제 동작 방법은 이 메소드를 상속 받은 하위 클래스의 책임으로 위임하고 있다.
13) final
실행되는 과정에서 한번 값이 정해진 뒤에는 상속 , 변경을 금지한다.
아래의 예시에서 PI는 final로 정의했기 때문에
main이 실행되는 중에 PI의 값을 바꿀 수 없다.
package org.opentutorials.javatutorials.finals; class Calculator { static final double PI = 3.14; ... } public class CalculatorDemo1 { public static void main(String[] args) { Calculator c1 = new Calculator(); System.out.println(c1.PI); //Calculator.PI = 10; } }
반응형'기타' 카테고리의 다른 글
[GIT] fatal: 'origin' does not appear to be a git repository 에러 해결 (0) 2021.04.14 오버라이딩(overriding)과 오버로딩(overloading)이란 (java) (0) 2021.04.02 [MAC] 터미널(terminal)에서 파인더(finder) 열기 (0) 2021.01.31 [mac os] 리눅스 서버 파일업로드 명령어 (0) 2020.11.16 github 협업 명령어 (0) 2020.08.07