ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 내가 보려고 정리하는 java 개념 코드 정리
    기타 2021. 4. 2. 22:02
    반응형

    객체 지향 언어에 대해 제대로 공부한 적이 없어

    하루동안 java 언어의 개념을 한번 훑어보았습니다. 

    이 전에 사용한 dart 언어와 비슷한 점이 많아 개념을 이해하기 어렵지 않았습니다. 

     

    저는 생활코딩을 보고 공부했습니다

    opentutorials.org/course/2517

     

    Java 기본 과정 - 프로그래밍 입문

    Java 언어 생활코딩 요약본. 

    opentutorials.org

     


     

    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/99

     

     

    11) 접근 제어자 

     

    클래스의 멤버(변수와 메소드)의 접근 제어자 

    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; 
     
     
        }
     
    }

     

    반응형

    댓글

Designed by Tistory.