728x90

자바 

안드로이드

객체지향 프로그래밍 관해서는 모든 기술을 사용할 수 있음


자바 플랫폼

JDK(Java Development Kit) 자바 프로그램에 개발에 필요한 구성 요소

JRE(Java Runtime Environment) 자바 프로그램 실행에 필요한 구성 요소(라이브러리)

API(Application Programming Interface)


장점

플랫폼에 독립적, 여러 운영체제나 하드웨어에서도 동일하게 실행


빅데이터와 자바


C

하드웨어나 회로가 달라지면 소스가 달라짐


C#, Java

소스 한 번만 짜면 상관없음


1
2
3
4
5
6
public class HelloJava {
    public static void main(String[] args) {
        System.out.println("Hello Java");
    }
}
 
cs


1
2
3
4
5
6
7
public class Hello2 {
    public static void main(String[] args) {
        int a = 100;
        int b = 200;
        System.out.println(a+b);
    }
}
cs


인스턴스, 객체

상속

캡슐화

캡슐화는 생성한 객체를 어떤 메서드와 필드로 어떻게 일을 수행할지 외부에 숨기는 특성


Artifact Coordinates

GroupId : com.google로 바꿀 수 있음 -> 보통 도메인을 거꾸로


java 폴더에

package 추가

class 파일을 package에 끌어넣음

refactor 클릭


community 버전은 패키지를 수동으로 해줘야함


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.google;
 
class MyClass {
    // 멤버변수
    private int num;
    // 생성자
    public MyClass(){
        this.num = 10;
    }
    // 멤버 메소드
    public void printNum(){
        System.out.println(num);
    }
}
public class MyClassTest {
    public static void main(String[] args) {
        MyClass mc = new MyClass();
        mc.printNum();
    }
}
 
cs


계산기 클래스


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Cal{
    private int num1;
    private int num2;
    public Cal(){
        this.num1 = 10;
        this.num2 = 20;
    }
    public void plusNum(){
        System.out.println(num1+num2);
    }
    public void minusNum(){
        System.out.println(num1-num2);
    }
    public void multiplyNum(){
        System.out.println(num1*num2);
    }
    public void divisionNum(){
        System.out.println((float)num1/num2);
    }
}
 
public class Calculator {
    public static void main(String[] args) {
        Cal c = new Cal();
        c.plusNum();
        c.minusNum();
        c.multiplyNum();
        c.divisionNum();
    }
}
 
cs


자바에서 입력받기

Scanner sc = new Scanner(System.in);

Alt + Enter해서 import

int n = sc.nextInt();

문자열은 sc.next();


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.Scanner;
 
class Cal{
    private int num1;
    private int num2;
    public Cal(int num1, int num2){
        this.num1 = num1;
        this.num2 = num2;
    }
    public void plusNum(){
        System.out.println(num1+num2);
    }
    public void minusNum(){
        System.out.println(num1-num2);
    }
    public void multiplyNum(){
        System.out.println(num1*num2);
    }
    public void divisionNum(){
        System.out.println((float)num1/num2);
    }
}
 
public class Calculator {
    public static void main(String[] args) {
 
        Scanner sc = new Scanner(System.in);
        System.out.print("첫 번째 수를 입력하세요: ");
        int num1 = sc.nextInt();
        System.out.print("두 번째 수를 입력하세요: ");
        int num2 = sc.nextInt();
        Cal c = new Cal(num1,num2);
        c.plusNum();
        c.minusNum();
        c.multiplyNum();
        c.divisionNum();
        System.out.println("한글");
    }
}
cs


클래스에 final 붙으면 상속이 안됨

돈이 된다싶은 클래스엔 다 final이 붙어있음


자바는 클래스명을 대문자로 시작

메소드는 소문자로 시작


자바가 대용량데이터 왔다갔다하기에 좋음

extends

상속

implements

인터페이스


static

지금 메모리를 할당


final

변수에 붙이면 상수처럼(변경X)

메소드에 붙이면 오버라이딩, 오버로딩 불가

클래스에 붙이면 상속X


abstract

추상 클래스 선언에 사용되는 한정자


synchronized/volatile

둘 다 스레드 프로그래밍에서 여러 스레드가 동시에 자원에 접근할 때 발생하는 데이터 동기화를 처리하는 한정자


인스턴스

MyClass my = new MyClass();

생성자

리턴값이 없다.


우클릭 - Generate - Constructor/Getter/setter


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package org.example;
 
class Cat {
    // 멤버 변수
    private String color;
    private String name;
    private int age;
 
    // default 생성자
    public Cat(){
    }
 
    public Cat(String name) {
        this.name = name;
    }
 
    // 인자가 있는 생성자
    public Cat(String color, String name, int age){
        this.color = color;
        this.name = name;
        this.age = age;
    }
    // 멤버함수
    public String getColor() {
        return color;
    }
 
    public void setColor(String color) {
        this.color = color;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
}
 
public class CatTest {
    public static void main(String[] args) {
        Cat cat1 = new Cat();
        Cat cat2 = new Cat("야옹이");
        Cat cat3 = new Cat("검은색""네로",12);
 
        System.out.println(cat3.getName());
        System.out.println(cat3.getColor());
        System.out.println(cat3.getAge());
//        cat1.name = "뽀삐"; // Error 멤버변수 name은 private
        cat1.setName("뽀삐"); // 멤버에 접근하기 위한 간접접근 방식
    }
}
cs


Quiz


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Product {
    private String productName;
    private int barcodeNumber;
    public Product() {
    }
    public Product(String productName, int barcodeNumber) {
        this.productName = productName;
        this.barcodeNumber = barcodeNumber;
    }
 
    public String getProductName() {
        return productName;
    }
 
    public void setProductName(String productName) {
        this.productName = productName;
    }
 
    public int getBarcodeNumber() {
        return barcodeNumber;
    }
 
    public void setBarcodeNumber(int barcodeNumber) {
        this.barcodeNumber = barcodeNumber;
    }
}
public class ProductTest {
    public static void main(String[] args) {
        Product p = new Product();
        p.setProductName("Galaxy");
        p.setBarcodeNumber(1234);
        System.out.println(p.getProductName());
        System.out.println(p.getBarcodeNumber());
 
        Product p2 = new Product("Iphone"5678);
        System.out.println(p2.getProductName());
        System.out.println(p2.getBarcodeNumber());
    }
}
 
cs


객체를 멤버로


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
class Product {
    private String name;
    private Barcode code;
    // default 생성자
    public Product() {
        this.name = "car";
        code = new Barcode();
        code.setNumber(1234); // NullPoint Exception
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Barcode getCode() {
        return code;
    }
 
    public void setCode(Barcode code) {
        this.code = code;
    }
}
class Barcode {
    private int number;
    public Barcode() {
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
}
public class ProductTest2 {
    public static void main(String[] args) {
        Product car = new Product();
        System.out.println(car.getName());
        System.out.println(car.getCode().getNumber());
    }
}
 
cs



객체를 멤버로 쓰려면 new해줘야함


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class Product {
    private String name;
    private Barcode code;
    // default 생성자
    public Product() {
        this.name = "car";
        code = new Barcode();
        code.setNumber(1234); // NullPoint Exception
    }
 
    // 인자가 2개 있는 생성자
    public Product(String name, int number) {
        this.name = name;
        this.code = new Barcode();
        this.code.setNumber(number);
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Barcode getCode() {
        return code;
    }
 
    public void setCode(Barcode code) {
        this.code = code;
    }
}
class Barcode {
    private int number;
    public Barcode() {
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
}
public class ProductTest2 {
    public static void main(String[] args) {
        Product car = new Product();
        System.out.println(car.getName());
        System.out.println(car.getCode().getNumber());
 
        Product car2 = new Product("ABC",2345);
        System.out.println(car2.getName());
        System.out.println(car2.getCode().getNumber());
    }
}
 
cs


자바 가상머신의 메모리 구조


메서드(Method) 영역

메서드 바이트코드

클래스(static) 변수


힙(Heap) 영역

자바 객체

인스턴스 변수


스택(Stack) 영역

메서드 파라미터

지역 변수


static 변수

메모리들의 공통 변수 (메서드 영역)


new를 해야 객체가 만들어지는데(힙 영역) static은 메인이 실행되자마자 만들어짐(메서드 영역)


윤년 Quiz


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.Scanner;
 
public class LeapYearTest {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("연도 입력: ");
        int year = sc.nextInt();
        if(year%4==0){
            if (year%100==0){
                if (year%400==0) {
                    System.out.println("윤년");
                    return;
                }
                System.out.println("평년");
                return;
            }
            System.out.println("윤년");
        }
        else{
            System.out.println("평년");
        }
    }
}
cs


추상 클래스와 인터페이스

추상 클래스

객체로 만들고 싶지 않지만 개념으로 존재해야 하는 클래스


인터페이스

public static 안 해도 자동으로 public static


Ctrl + O

부모 클래스 중 구현이 가능한 것을 보여줌


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package org.example;
 
class Car {
    public int speed;
    public void print() {
        System.out.println("Car print()");
    }
}
// 상속
class SuperCar extends Car {
    @Override
    public void print() {
        System.out.println("SuperCar print()");
    }
}
 
public class Main {
    public static void main(String[] args) {
        SuperCar sc = new SuperCar();
        sc.print();
    }
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package org.example;
 
import java.lang.*// 생략가능
 
class Car extends Object {
    public int speed;
    public void print() {
        System.out.println("Car print()");
    }
}
// 상속
class SuperCar extends Car {
    @Override
    public void print() {
        System.out.println("SuperCar print()");
    }
}
 
public class Main {
    public static void main(String[] args) {
        SuperCar sc = new SuperCar();
        sc.print();
    }
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package org.example;
 
import java.lang.*// 생략가능
 
class Car extends Object {
    public int speed;
    public void print() {
        System.out.println("Car print()");
    }
}
// 상속
class SuperCar extends Car {
    @Override
    public void print() {
        System.out.println("SuperCar print()");
    }
 
    @Override
    public String toString() {
        return super.toString();
    }
}
 
public class Main {
    public static void main(String[] args) {
        SuperCar sc = new SuperCar();
        sc.print();
        System.out.println(sc.toString());
    }
}
 
cs


회사 간 협업, 버전별로 갈아끼울 때 implements가 유용함

자바는 다중상속이 안되는데 그럴 때 인터페이스가 다중상속의 기능을 함


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
interface Flyable {
    void fly(); // interface의 메소드는 구현없이
}
class Cat extends Object implements Flyable { // 다중 상속
    @Override
    public void fly() {
        System.out.println("I'm fly~!");
    }
}
public class Main {
    public static void main(String[] args) {
        Cat c = new Cat();
        c.fly();
    }
}
cs


스프링을 하면 디자인패턴이 쓰임

디자인패턴을 하면 8,90점 짜리 구현 가능


메서드 오버로딩

파라미터가 다른 메서드


메서드 오버라이딩

슈퍼 클래스에서 정의한 메서드를 서브 클래스에서 재정의하는 것


Swing/AWT java의 GUI는 망함

설계부터 잘못됨

java fx는 괜찮은데 따로 받아야함


자바 API

Networking

네티

상품화되려면 동기로 하면 안됨

네티를 쓰면 좋은데 무거워지기 시작함


java.lang 패키지의 주요 클래스

String 클래스

String str = new String("홍길동");

String str1 = "hello";


문자열 비교할 때는 ==이 아니라 equlas() 메서드 사용

String str3 = "hello";

String str4 = new String('hello");

new 하면 힙 공간에 만들어짐 -> 이중 포인터 - 포인터 주소는 다르지만 궁극적으로는 같음


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class StringTest {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "Hello";
        String str3 = "Hello";
        String str4 = new String("Hello");
 
        System.out.println(str1.hashCode());
        System.out.println(str2.hashCode());
        System.out.println(str3.hashCode());
        System.out.println(str4.hashCode());
        
        if(str1==str2)
            System.out.println("str1과 str2는 같습니다.");
        else
            System.out.println("str1과 str2는 다릅니다.");
        if(str3==str4)
            System.out.println("str3과 str4는 같습니다.");
        else
            System.out.println("str3과 str4는 다릅니다.");
    }
}
cs


str1, str2, str3는 다 같게 나오고 str3와 str4는 다르게 나옴.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class StringTest {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = "Hello";
        String str3 = "Hello";
        String str4 = new String("Hello");
 
        System.out.println(str1.hashCode());
        System.out.println(str2.hashCode());
        System.out.println(str3.hashCode());
        System.out.println(str4.hashCode()); // 이중포인터
        
        if(str1==str2)
            System.out.println("str1과 str2는 같습니다.");
        else
            System.out.println("str1과 str2는 다릅니다.");
        if(str3==str4)
            System.out.println("str3과 str4는 같습니다.");
        else
            System.out.println("str3과 str4는 다릅니다.");
        if(str3.equals(str4))
            System.out.println("str3과 str4는 같습니다.");
        else
            System.out.println("str3과 str4는 다릅니다.");
    }
}
cs


다르게 하려면 StringBuffer를 사용

프로그램 응용에 좋음 - append() - StringBuffer에 값 추가


Quiz

알파벳 대문자 26자를 StringBuffer를 이용하여 출력


1
2
3
4
5
6
7
8
9
public class StringTest {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("A");
        for(int i=1;i<26;i++){
            sb.append((char)((int)'A'+i));
        }
        System.out.println(sb);
    }
}
cs


728x90
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기